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

shellexecute, windows-services

Solution

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.

Problem

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' ```

Original source

Related problems