You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Inno Setup中使用InstallUtil.exe安装服务?现有方案无效求助

解决Windows服务安装的命令行启动错误及Inno Setup脚本修正

首先,你遇到的错误提示核心原因很明确:Windows服务必须先注册到系统的服务控制管理器(SCM),才能通过服务管理工具或NET START启动,不能直接从命令行/调试器运行服务程序本身。你的当前脚本存在两个关键问题:混用了两种服务安装方式,且部分命令格式错误。

问题分析

你在[Run]段同时写了两个安装命令:

  • 一个是调用程序自带的--install参数(这类参数通常是服务框架如TopShelf、NSSM封装的一键安装逻辑)
  • 另一个是尝试直接执行create命令(这实际是系统sc.exe的命令,但你错误地让LBCPUMon.exe去执行它,而非调用系统的sc.exe)

这两种方式冲突,而且后者的命令格式完全错误,导致服务没有正确注册,进而触发启动错误。

解决方案

根据你的程序支持的方式,二选一执行:

方案1:使用程序自带的--install/--uninstall参数(推荐)

如果你的LBCPUMon.exe确实支持--install参数(很多服务框架会封装注册、设置启动类型等逻辑),那只需要保留这个命令即可,不需要额外的sc命令:

[Run]
; 仅用程序自带的安装参数,runhidden确保后台执行
Filename: "{app}\LBCPUMon.exe"; Parameters: "--install"; Flags: runhidden

[UninstallRun]
; 先停止服务(如果程序支持--stop参数,否则用sc stop),再卸载
Filename: "{app}\LBCPUMon.exe"; Parameters: "--stop"; Flags: runhidden
Filename: "{app}\LBCPUMon.exe"; Parameters: "--uninstall"; Flags: runhidden

方案2:使用系统sc.exe命令手动注册服务

如果程序不支持自带的安装参数,需要用sc.exe手动创建服务,注意要调用系统的sc.exe(通常在%SystemRoot%\System32下),且参数格式要正确:

[Run]
; 使用sc.exe创建服务,注意binPath的引号转义(Inno Setup里用两个双引号转义)
Filename: "{sys}\sc.exe"; Parameters: "create LBCPUMon start= auto binPath= ""{app}\LBCPUMon.exe"""; Flags: runhidden
; 创建后启动服务
Filename: "{sys}\sc.exe"; Parameters: "start LBCPUMon"; Flags: runhidden

[UninstallRun]
; 先停止服务,再删除
Filename: "{sys}\sc.exe"; Parameters: "stop LBCPUMon"; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete LBCPUMon"; Flags: runhidden

关键注意事项

  • 不要同时混用两种安装方式,否则会导致服务注册混乱
  • 确保安装程序以管理员权限运行:Inno Setup可以在[Setup]段添加PrivilegesRequired=admin,因为服务注册需要管理员权限,这也是很多时候安装失败的隐性原因
  • 如果使用sc.exe,start= auto中间的空格不能省略,这是sc命令的语法要求

内容的提问来源于stack exchange,提问作者Ollie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:20