首页 > 解决方案 > 使用 SC 在 Inno Setup 中设置服务属性

问题描述

我在使用 SC 和 Inno Setup 创建服务时尝试设置多个属性到目前为止,我无法让它 100% 工作,我已经让服务名称、显示名称、依赖项和描述正常工作。这只是我需要预设的恢复设置。(见图)

在此处输入图像描述

我尝试了多种编写方式,我尝试了在同一行中使用单引号、双引号和斜引号的失败和描述部分,它们都不起作用我在新行上尝试过,如下所示,这也不起作用。不确定它们是否必须按特定顺序排列?

我环顾四周,没有发现任何关于设置恢复设置的例子是: Inno Setup:使用“sc create”安装 Windows 服务 当然我也看过这里:https ://docs.microsoft.com/en-us/previous -versions/windows/it-pro/windows-server-2012-r2-and-2012/cc742069(v%3Dws.11)但我不知道如何将其转换为 inno 脚本。

我知道这不是执行此操作的“正确方法”,最好使用 pascal 代码或使用这些服务脚本http://www.sandon.it/node/9但我只是想以自己的好奇心理解这种方式/education 加上我还没有找到任何好的 Pascal 代码示例。

我确实通过将服务脚本包含在代码部分中,然后使用注册表设置来处理一些 pascal 代码,以便设置它不支持的属性,但是我特别想知道如何仅使用 SC.exe 来做同样的事情以供我自己的教育。

[Run]
Filename: {sys}\sc.exe; Parameters: "create SERVICENAME start= auto DisplayName= ""SERVICEDISPLAYNAME"" binPath=""{app}\SERVICEEXE.exe"" depend= mpssvc"; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "failure ""SERVICENAME"" reset= 100 actions= restart/1000/restart/1000"; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "description SERVICENAME ""SERVICE DESCRIPTION"""; Flags: runhidden


[UninstallRun]
Filename: {sys}\sc.exe; Parameters: "stop SERVICENAME" ; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "delete SRVICENAME" ; Flags: runhidden

标签: inno-setup

解决方案


这个问题有点老了,但我想出了从脚本中设置 SC FAILURE 的解决方案,这可能对其他人有用。

报告的问题(未设置恢复操作)是由命令末尾设置的标志 ( runhidden) 引起的。如果设置waituntilidlewaituntilterminated. 但最简单的解决方案是删除标志,因为waituntilterminated它是默认标志。

Filename: "{sys}\sc.exe"; Parameters: "failure ""MyService"" reset= 86400 actions= restart/60000/restart/60000/restart/60000"

另一个有趣的事情是,reset期望以分钟为单位接收时间,但 GUI 显示天数,因此如果值小于 84600,则始终显示 0 天。

GUI 中的“重新启动服务”以分钟为单位,但在命令中以毫秒为单位,因此如果大于 60000,则仅显示 0 以外的内容。

最后一件事是设置少于 3 次失败的方式,动作应该是空的,但需要一些时间来定义。

actions= restart/15000/restart/30000//1000

最后一点在这篇文章中进行了解释:
如何使用“sc”来安装服务并为恢复下的“后续失败”指定 NO ACTION


推荐阅读