Search code examples
windows-servicesshellexecute

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


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'

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.