问题 如何从命令行指定名称和描述安装Windows服务?


我用Delphi为客户端服务器应用程序创建了一个Windows服务。

要安装它,我使用

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

这将安装该服务,并在Windows服务中列出“MyService”名称和空描述。

如何定义不同的名称并插入描述(在运行时可以看到) services.msc)?

注意: 我需要这个,因为在同一台机器上我需要安装更多次相同的服务(每个数据库1个)。

目前我唯一的解决方法是重命名服务exe,但我更愿意找到正确的命令行方式(因为我这样做 ShellExecute)。

更新: 不知何故,我会寻找类似的东西(这当然只是出于解释原因! - InstallService.exe 是我刚刚发明的名字):

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

而且更紧凑的版本会很好:

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

7814
2017-08-29 10:35


起源

+1我不明白为什么这个问题值得投票 - Jerry Dodge
请注意Delphi TService 在创建名称与其不同的名称时,无法启动该服务 Name 属性。看到 服务无法启动 有关问题的描述和解决方法。 - JRL
@Jerry - 这不是一个糟糕的问题,但似乎是偏离主题的。 Perhpas将解释downvote。超级用户更适合“我如何使用此命令”问题。 - jww


答案:


Windows已经附带了您需要的实用程序,即 sc create

> sc create /?
描述:
        在注册表和服务数据库中创建服务条目。
用法:
        sc创建[服务名称] [binPath =] ...

选项:
注意:选项名称包括等号。
      等号和值之间需要一个空格。
 类型=
       (默认=自己)
 开始=
       (默认=需求)
 错误=
       (默认=正常)
 binPath =
 基团=
 标签=
 取决于=
 OBJ =
       (默认= LocalSystem)
 显示名称=
 密码=

这将创建服务并允许您指定名称和显示名称。

修改您需要的描述 sc description

> sc description /?
描述:
        设置服务的描述字符串。
用法:
        sc description [服务名称] [描述]

另一个明显的选择是在您的服务中构建命令行解析。这很容易做到。只需为服务分配处理程序即可 BeforeInstall 和/或 AfterInstall 事件并处理那里的开关。


13
2017-08-29 10:44



非常感谢。我从命令行尝试了所有,它按预期工作。它也适用于相同的exe insatlled meany次(当然eith不同[服务名称]。 - LaBracca
此外 sc delete [service name] 关闭循环 - LaBracca
是的,sc是你的家伙 - David Heffernan
例子:  知识库Microsoft   - 创建,查询,停止和删除示例   - 讨论参数 - Custodio
容易错过的东西(即使它在sc的描述中)是你需要binPath =之后的空格,所以你不能做binPath = mypath,而是你必须做binPath = mypath - Robert