Inno Setup:使用"sc create"安装Windows服务

rak*_*esh 11 inno-setup

我有两个二进制文件,必须为它们创建一个服务.我尝试使用如何使用Inno Setup安装Windows服务的 "sc create"解决方案

但它对我不起作用.它在安装结束时卡住了.我究竟做错了什么?

这是我的代码:

Filename: {cmd}; Parameters: "sc create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden
Run Code Online (Sandbox Code Playgroud)

我尝试使用cmd而不是{cmd}- 没有变化.

我没有在我提到的解决方案中尝试Pascal代码.我将它作为最后的手段.

rak*_*esh 25

我使用了这段代码,我的两个服务都是安装和卸载:

[run]
Filename: {sys}\sc.exe; Parameters: "create mysrv start= auto binPath= ""{app}\mysrv.exe""" ; Flags: runhidden

[UninstallRun]
Filename: {sys}\sc.exe; Parameters: "stop mysrv" ; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "delete mysrv" ; Flags: runhidden
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,所以为什么我应该在这种情况下使用Pascal.

  • *在这种情况下,为什么我应该使用Pascal?*因为如果此脚本出现问题,您无法处理或做出反应?我知道你现在不在乎,但不久你会.如果您告诉他们安装成功并且他们运行应用程序期望服务运行应用程序失败,您的用户可能会感到惊讶,因为服务实际上会停止,但您不会注意到安装程序中服务启动失败的尝试失败. (11认同)

Dea*_*nna 11

你有没有理由试图通过它{cmd}

添加/C参数并根据需要引用其余参数,或者仅sc.exe使用所需参数运行.

[Run]
Filename: "sc.exe"; Parameters: "create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden 
Run Code Online (Sandbox Code Playgroud)

请注意,安装服务的正确方法是本答案中提到的API,它允许您检测和处理错误.