04. August 2013 · Comments Off on Run a program as a Service · Categories: Microsoft, Windows · Tags: , , ,

I wanted to setup some programs to run as Windows Services but found information on the subject to be scattered around everywhere. So this post is basically for consolidation and clarification but is not focused on unattended installations.

What is a Service?
A Windows Service is automatically started when your system boots. There is no need to logon to the system. Services also are not affected by people logging off. Services automatically recover from program crashes and Standby and Hibernation modes. Windows 9x/ME do not have a Service facility. Installing software as a Service requires Administrator permissions.

What are the options for running a program as a Service?

  • sc.exe
    This is Microsoft software and is installed by default on XP and 2003. It is probably the best and easiest method but it won’t work if the target executable was not programmed to run as a Service. This rules it out for what many people are trying to do since most programs that are designed ro run as a Service have that option included somewhere in the application. sc.exe is useful for the Unattended crowd, though.
    The syntax for sc.exe is worth noting. This will NOT work:

    sc create YourServiceName binPath=”c:Program Filesdirectoryappname.exe”

    But this WILL work (note the space after the =):

    sc create YourServiceName binPath= “c:Program Filesdirectoryappname.exe”

    Two other useful options, with the same syntax as above, are:

    type= <own|share|interact|kernel|filesys|rec>
    	  (default = own)
    start= <boot|system|auto|demand|disabled>
    	  (default = demand)

    You can use these commands for more details:

    sc /?
    sc create /?
  • instsrv.exe and srvany.exe
    This is Microsoft software but was published as part of the Resource Kits. You can download the files here or here. Thanks to tacktech.com for providing the fileset.Instrsrv.exe installs the Service but srvany.exe is the real gem here as it is a wrapper that allows any software to be run as a Service. This method worked great for me but does require manual registry edits.

    Here is a quick summary of the steps invloved but you can find more complete instructions at Microsoft’s KB page or TackTech’s page with great screenshots.

    • Unpack the fileset to a folder of your choice. srvany.exe needs to remain on your system for this method to work, so put it somewhere like Program files where you won’t mind leaving it around. I use C:Program Filesservices in this example.
    • Install the Service with a command like this:
      C:Program FilesservicesInstsrv.exe YourServiceName C:Program FilesservicesSrvany.exe
    • Using a registry editor, find this key:
      HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesYourServiceName
    • Add a new sub-key called Parameters.
    • In the Parameters key, create a new string value named Application.
    • Set the value data of Application to the full path of the executable file that you want the service to launch. For example, C:WINNTnotepad.exe.
    • Using the Services console, find your new service and make any necessary property edits. This dialog will allow you to set the startup type, logon method, and program failure options.

    One problem I ran into with this method was task tray entries. Some programs won’t work if their task tray entry fails. If the software you want to run wants to put an icon in the task tray you can try enabling “Allow service to interact with the desktop” on the “Log On” tab of the Service properties. If that doesn’t work you could also try disabling the task tray entry for the program.

  • Launcher Service
    Camarade_Tux recommends Launcher Service. It is free and open source and looks very flexible and useful. This program has several unique features:

    • Start or stop a program based on network connectivity
    • External program can be run before or after execution
    • Delete *.tmp and *.pid files from the program’s startup folder before execution
  • WinServ

    WinServ is a utility that can create an NT service that runs any application. When the application exits, the service becomes stopped.

    I did not try this program but included it here since it is free, open source and looks useful.

  • Non-free options
    There are quite a few shareware and payware options. I didn’t try any of them but I hear that FireDaemon works well for a lot of people.

References

  • http://support.microsoft.com/kb/251192
  • http://support.microsoft.com/kb/q137890
  • http://www.tacktech.com/display.cfm?ttid=197
  • http://www.msfn.org/board/index.php?showtopic=72799
  • http://www.msfn.org/board/index.php?showtopic=40581
  • http://www.msfn.org/board/index.php?showtopic=62482
  • http://www.codeproject.com/system/serviceskeleton.asp

Comments closed.