MSFN Forum: How to run a program as a Service - MSFN Forum

Jump to content


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

How to run a program as a Service Rate Topic: -----

#1 User is offline   tain 

  • Cyber Ops
  • Group: Super Moderator
  • Posts: 3,558
  • Joined: 24-September 05
  • OS:none specified
  • Country: Country Flag

Posted 24 September 2006 - 11:44 AM

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:

    Quote

    sc create YourServiceName binPath="c:\Program Files\directory\appname.exe"
    But this WILL work (note the space after the =):

    Quote

    sc create YourServiceName binPath= "c:\Program Files\directory\appname.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 Files\services in this example.
    • Install the Service with a command like this:
      C:\Program Files\services\Instsrv.exe YourServiceName C:\Program Files\services\Srvany.exe
      

    • Using a registry editor, find this key:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourServiceName
      

    • 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:\WINNT\notepad.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

    Quote

    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


#2 User is offline   jaclaz 

  • The Finder
  • Group: Developers
  • Posts: 11,578
  • Joined: 23-July 04
  • OS:none specified
  • Country: Country Flag

Posted 25 September 2006 - 05:24 AM

Very interesting post! :)

I may add (Freeware for non commercial use):
NTWRAPPER
http://www.duodata.d...apper/index.htm

Codeproject (Sourcecode only) - any taker to compile it?:
XYNTSERVICE
http://www.codeproje...xyntservice.asp

jaclaz

#3 User is offline   tain 

  • Cyber Ops
  • Group: Super Moderator
  • Posts: 3,558
  • Joined: 24-September 05
  • OS:none specified
  • Country: Country Flag

Posted 25 September 2006 - 04:02 PM

Thanks, jaclaz :)

NT Wrapper looks great but I can't find the differences between the Lite and Pro versions. Do you know?

The Lite version also comes with a neat app called SaferTray which helps keep wandering icons in the tray where they belong.

I looked at that other app previously but didn't include it since it is aimed at programmers instead of users. But if you look at the comments at the bottom of the page you will see the familiar name Bilou_Gateux! I wonder if he got a copy and if it is suitable for use here? :whistle:

/me PMs him

#4 User is offline   CoffeeFiend 

  • Coffee Aficionado
  • Group: Super Moderator
  • Posts: 5,399
  • Joined: 14-July 04
  • OS:Windows 7 x64
  • Country: Country Flag

Posted 25 September 2006 - 07:37 PM

View PostTAiN, on Sep 25 2006, 06:02 PM, said:

NT Wrapper looks great but I can't find the differences between the Lite and Pro versions.

There's a chart on that page.

SMP/CPU binding only in pro version;
Lite version limited to one service/machine only
Pro version has offline help and support.

View Postjaclaz, on Sep 25 2006, 07:24 AM, said:

Codeproject (Sourcecode only) - any taker to compile it?:

Absolutely! I would, but there's no need for that as there's also a pre-compiled version along with the source in the zip file. If you have no account (req'd to download) and don't want to signup, then try bugmenot.

#5 User is offline   tain 

  • Cyber Ops
  • Group: Super Moderator
  • Posts: 3,558
  • Joined: 24-September 05
  • OS:none specified
  • Country: Country Flag

Posted 25 September 2006 - 08:03 PM

So there is. :blink:

I will blame this blunder on my sometimes over-eager filtering proxy. I see the table when I bypass it. Thanks!

Being limited to one service would be a deal breaker for me. How many apps do you guys think most people need to run as a service? I need at least two, but probably three.

#6 User is offline   CoffeeFiend 

  • Coffee Aficionado
  • Group: Super Moderator
  • Posts: 5,399
  • Joined: 14-July 04
  • OS:Windows 7 x64
  • Country: Country Flag

Posted 25 September 2006 - 10:43 PM

View PostTAiN, on Sep 25 2006, 09:03 PM, said:

Being limited to one service would be a deal breaker for me. How many apps do you guys think most people need to run as a service? I need at least two, but probably three.


Hard to tell... Personally I don't use any of these apps as Visual Studio will let you create your own services when you need one... (and even an installer for it and all - example with source code here)

But there are likely reasons to run other apps as a service like that (not that I've ever had the need - most apps that need or would benefit from this already take care of it, like web/ftp servers).

I can understand he wants to charge for it though - not that it's a very complex app or anything, but it takes time to design/code/make installer, write proper documentation, create a website for it (pay associated costs too), pay for hosting, end up having to support people (some people will ask questions - so you need email or a forum or something - and it can take a fair amount of time to answer those), maintain/bugfix/enhance it, etc. Understandable he wants to get some of that money back (or be paid for part of his time spent). So he's putting some artificial limitations on it to get their users with the most needs to pay for it.

Thing is, it's easy to create a simple app like that, and there's already some free & open source options (I bet one would find some stuff on sourceforge too). So people are mostly paying for convenience (they don't want to have to write or compile code or such things) - that and support. Someone with some knowledge and time will use something else or just "roll their own" basically.

People with simple needs will use the free version, others will either pay ~20$/PC or find something else if that's too much (but then you need to spend time looking for something else and such - not as "convenient")... Personally, I'd rather use something that I have the source for (willing to fix/enhance/modify it as req'd)

#7 User is offline   Zartach 

  • Junior
  • Pip
  • Group: Members
  • Posts: 91
  • Joined: 24-January 06

Posted 26 September 2006 - 12:16 AM

I have used vbscript in the past to create services:

CreateService.vbs
Const OWN_PROCESS = 16
Const NOT_INTERACTIVE = False
Const NORMAL_ERROR_CONTROL = 2

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")

Set objService = objWMIService.Get("Win32_BaseService")
errReturn = objService.Create("DbService", _
"NAME", _
"C:\WINDOWS\PROGRAM.EXE", _
OWN_PROCESS, _
NORMAL_ERROR_CONTROL, _
"Manual", _
NOT_INTERACTIVE, _
"NT AUTHORITY\LocalService", "")


RemoveService.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'SERVICE_NAME'")
For Each objService in colListOfServices
objService.StopService()
objService.Delete()
Next


I do believe that this will work only for programs that are meant to run as a service.

#8 User is offline   Bilou_Gateux 

  • Powered by Windows Embedded
  • PipPipPipPipPip
  • Group: Members
  • Posts: 766
  • Joined: 03-January 04

Posted 26 September 2006 - 10:15 AM

View Postjaclaz, on Sep 25 2006, 01:24 PM, said:

Very interesting post! :)

I may add (Freeware for non commercial use):
NTWRAPPER
http://www.duodata.d...apper/index.htm

Codeproject (Sourcecode only) - any taker to compile it?:
XYNTSERVICE
http://www.codeproje...xyntservice.asp

jaclaz


XYNTSERVICE GUI wrapper with compiled version
;)

This post has been edited by Bilou_Gateux: 26 September 2006 - 10:18 AM


#9 User is offline   jaclaz 

  • The Finder
  • Group: Developers
  • Posts: 11,578
  • Joined: 23-July 04
  • OS:none specified
  • Country: Country Flag

Posted 26 September 2006 - 12:29 PM

Bilou_Gateux said:

XYNTSERVICE GUI wrapper with compiled version


I stand (pleasantly) corrected. :thumbup

jaclaz

#10 User is offline   Camarade_Tux 

  • MSFN Addict
  • PipPipPipPipPipPipPip
  • Group: Members
  • Posts: 1,760
  • Joined: 22-May 05

Posted 27 September 2006 - 10:25 AM

View PostZartach, on Sep 26 2006, 08:16 AM, said:

I have used vbscript in the past to create services:

CreateService.vbs
Const OWN_PROCESS = 16
Const NOT_INTERACTIVE = False
Const NORMAL_ERROR_CONTROL = 2

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=Impersonate}!\\" & strComputer & "\root\cimv2")

Set objService = objWMIService.Get("Win32_BaseService")
errReturn = objService.Create("DbService", _
"NAME", _
"C:\WINDOWS\PROGRAM.EXE", _
OWN_PROCESS, _
NORMAL_ERROR_CONTROL, _
"Manual", _
NOT_INTERACTIVE, _
"NT AUTHORITY\LocalService", "")


RemoveService.vbs
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'SERVICE_NAME'")
For Each objService in colListOfServices
objService.StopService()
objService.Delete()
Next


I do believe that this will work only for programs that are meant to run as a service.


Afaik, windows DOS-style programs have a main function, graphical ones a winmain one and services have serv(ice)main or so function.
So a program needs to be designed to run as a service and moreover, services receive some specific messages (shutting down and co.) your program should handle if you want it not to simply die when you power your computer off.

View PostTAiN, on Sep 24 2006, 07:44 PM, said:

[*]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


... to be continued. :D

#11 User is offline   kitaec 

  • Newbie
  • Group: Members
  • Posts: 18
  • Joined: 12-May 06

Posted 30 September 2006 - 12:11 PM

Do you think it is possible to make a program starting as a service during Unattended?

Say it's some kind of driver (dll or sys) that can act as a service after regular installation.

I think Bilou_Gateux did something similar :rolleyes:

#12 User is offline   LLXX 

  • MSFN Junkie
  • PipPipPipPipPipPipPipPipPip
  • Group: Banned
  • Posts: 3,399
  • Joined: 04-December 05

Posted 30 September 2006 - 02:04 PM

Noone mentioned the "at xx:xx program.exe" ? This uses the task manager to run a program as a service at a specific time (and under full-priviledge System account too...)

#13 User is offline   tain 

  • Cyber Ops
  • Group: Super Moderator
  • Posts: 3,558
  • Joined: 24-September 05
  • OS:none specified
  • Country: Country Flag

Posted 01 October 2006 - 11:12 AM

@LLXX: Please explain.

@kitaec: Some of the methods in this thread can be used for unattended. Look at sc.exe and the vbscript.

#14 User is offline   kitaec 

  • Newbie
  • Group: Members
  • Posts: 18
  • Joined: 12-May 06

Posted 01 October 2006 - 01:57 PM

TAiN
Thank you. But doesn't sc.exe applies to .EXE files? And if there is a .SYS file (say - system driver)? And there are two .INF files with it which install and specify this .SYS as a service. But they don't make it to start like a service :(

Vbscripts can't be used for some reason :)

#15 User is offline   Ctrl-X 

  • Advanced Member
  • PipPipPip
  • Group: Members
  • Posts: 444
  • Joined: 29-August 06

Posted 02 October 2006 - 02:15 AM

Excellent topic; should be made sticky IMHO :)

#16 User is offline   tain 

  • Cyber Ops
  • Group: Super Moderator
  • Posts: 3,558
  • Joined: 24-September 05
  • OS:none specified
  • Country: Country Flag

Posted 26 July 2007 - 08:12 AM

View Postkitaec, on Oct 1 2006, 01:57 PM, said:

But doesn't sc.exe applies to .EXE files?
Yes. What are you trying to do?

Just stumbled onto this page today:
Quick Start Multiple Services using Batch and Net
Nothing new, but demonstrates usage of the batch commands.

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

5 User(s) are reading this topic
0 members, 5 guests, 0 anonymous users



All trademarks mentioned on this page are the property of their respective owners
Copyright © 2001 - 2013 msfn.org
Privacy Policy