How to install a windows service from command line specifying name and description?

LaBracca picture LaBracca · Aug 29, 2013 · Viewed 30.9k times · Source

I created a Windows service with Delphi for a client server application.

To install it I use

c:\Test\MyService.exe /install (or /uninstall)

This installs the service and in Windows services it lists with "MyService" name and empty description.

How to define a different name and insert a description (to be seen when running services.msc)?

Note: I need this because on the same machine i need to install more times the same service (1 per database).

Currently the only workaround i foudn is to rename the service exe, but I'd prefer to find out the correct command line way to do it (since I do this from ShellExecute).

Update: Somehow i'd look for something like (this is just for explanation reasons of course! - InstallService.exe is a name i just invented):

InstallService.exe c:\Test\MyService.exe /install /name='MyService1' 
  /description='This is my service for database 1'

but also a more compact version would be fine like:

c:\Test\MyService.exe /install /name='MyService1' 
  /description='This is my service for database 1'

Answer

David Heffernan picture David Heffernan · Aug 29, 2013

Windows already ships with the utility that you need, namely sc create.

>sc create /?
DESCRIPTION:
        Creates a service entry in the registry and Service Database.
USAGE:
        sc  create [service name] [binPath= ]  ...

OPTIONS:
NOTE: The option name includes the equal sign.
      A space is required between the equal sign and the value.
 type= 
       (default = own)
 start= 
       (default = demand)
 error= 
       (default = normal)
 binPath= 
 group= 
 tag= 
 depend= 
 obj= 
       (default = LocalSystem)
 DisplayName= 
 password= 

This will create the service and allow you to specify the name and display name.

To modify the description you need sc description:

>sc description /?
DESCRIPTION:
        Sets the description string for a service.
USAGE:
        sc  description [service name] [description]

The other obvious option is to build command line parsing into your service. That's trivially easy to do. Simply assign handlers for the service's BeforeInstall and/or AfterInstall events and process the switches there.