Inno Setup中CreateService函数设置服务依赖异常排查
Dependency参数格式误用
Inno Setup的Dependency参数仅接受空格分隔的服务名称,如果误将服务可执行文件路径(比如{app}\MyService.exe)、变量或其他非服务名称内容写入该参数,编译时可能不会报错,但安装后这些无效内容会被直接写入注册表的DependsOn项。检查你的[Run]或[Install]段中服务相关的Dependency配置,确保只填服务的显示名称或服务键名。注册表项未正确覆盖
若测试机曾安装过旧版本程序,注册表中对应服务的DependsOn项可能存在残留内容。如果你的安装脚本没有设置覆盖该注册表键的规则(比如未在[Registry]段中添加Flags: uninsdeletekey或Flags: overwrite),新安装时会将新的依赖值追加到原有内容后,导致出现无效的混合内容。自定义脚本的参数拼接错误
如果你在[Code]段中通过调用系统命令(如sc create)手动安装服务,而非使用Inno Setup内置的服务安装机制,可能在拼接depend参数时出错。比如误将服务路径、安装目录变量等当作依赖名称传入,导致注册表写入错误内容。检查自定义脚本中sc create命令的depend参数是否仅包含合法的服务名称。Inno Setup版本BUG
部分旧版本的Inno Setup在处理多服务依赖、含特殊字符的服务名称时存在解析BUG,会导致依赖参数被错误解析并写入额外内容。尝试升级到最新稳定版的Inno Setup,重新编译安装包后测试。全局变量或配置污染
如果你的脚本中使用了全局变量存储依赖列表,且该变量在其他逻辑中被意外修改(比如拼接了安装路径、临时文件路径等),会导致最终写入注册表的DependsOn值包含无效内容。检查变量赋值和传递的逻辑,确保依赖列表未被意外篡改。
内容的提问来源于stack exchange,提问作者TheLethalCoder

