Printing from a Service

Environment: Windows NT 4

The Problem

Have you ever attempted to print from a Windows NT Service?

Some time ago my colleagues and I wrote a TCP/IP server to collect data, analyze it and then print exceptions. Obviously, printing is usually a very simple and typical task for any software engineer.

When I finished developing this application, I then converted it to a Windows NT service. Everything seemed to work well with one exception. The application wouldn't print anything!

With my heart in my hands, I then began the arduous task of walking the registry and searching for a solution. Finally, I found it after a few days.

The solution

  • Locate the following registry key
  • 
    HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
  • Write down the value of "Device" as you'll be using it soon
  • Locate the following registry key
  • 
    HKEY_USERS\.DEFAULT\Software\Microsoft\WindowsNT\CurrentVersion\Windows\ 
    
  • Copy the previous information into the field "Device"
  • Reboot your PC
That's it! Now you can print from a Windows NT service.

Warning!

Modifing your registry incorrectly can result in serious, system-wide problems. Therefore, use this advice at your own risk.

Acknowledgements

Thanks to my friend Maurizio Picco for his usefull help.



Comments

  • How can i do to print document from SYSTEM account ???

    Posted by Legacy on 01/16/2002 12:00am

    Originally posted by: Barbier J�r�me

    I have a NT Service which start with SYSTEM account.
    
    During my process i need to print document to a specific printer using 'ShellExecute' with 'printto' verb.
    But I don't manage to retrieve Driver and Port for my printer and the function failed..

    Best regards.

    Reply
  • Log from NT service without using Event Log

    Posted by Legacy on 02/19/2000 12:00am

    Originally posted by: Tibor Hellvig

    I have converted a program to NT service and now my logging to a regular text file no longer works. Can anyone help?

    Reply
  • This works for any program called by a service

    Posted by Legacy on 11/21/1999 12:00am

    Originally posted by: Bernard Cheung

    Thanks to this solution, I am able to use Windows NT's AT command or some Scheduler program to schedule print jobs of third party programs.

    cheers

    Bernard

    Reply
  • Where's the problem ?

    Posted by Legacy on 11/16/1999 12:00am

    Originally posted by: Bernard Alleysson

    I did not find any problem to print from a service I've written. I'm just using:

    m_hDC = CreateDC(
    _T("WINSPOOL"),
    pszDevice, NULL, pDevMode
    );

    where pszDevice is the UNC name of the printer ie
    \\server\printername

    IMHO, no registry copy needed

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Packaged application development teams frequently operate with limited testing environments due to time and labor constraints. By virtualizing the entire application stack, packaged application development teams can deliver business results faster, at higher quality, and with lower risk.

  • Do you know where your data is? Consumer cloud-based file sharing services store your sensitive company data on servers outside of your control, outside of your policy and regulatory guidelines – maybe even outside your country – and not managed by you. The potential for data leakage, security breaches, and harm to your business is enormous. Download this white paper to learn about file sync and share alternatives that allow you to manage and protect your sensitive data while integrating and …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds