GitHub CI环境下如何用SignPath为Inno Setup卸载程序签名?
解决Inno Setup卸载程序的SignPath签名问题(GitHub CI环境)
针对你在GitHub CI中遇到的Inno Setup卸载程序无法通过SignPath签名的问题,以下是两种可行的解决方案:
方案一:拆分编译流程,先签名卸载程序再打包主安装包
这种方式直接在编译环节插入签名步骤,通过参数控制分阶段执行,无需中断脚本:
修改Inno Setup脚本,添加自定义编译参数控制是否仅生成卸载程序:
#ifdef GenerateUninstallerOnly [Setup] ; 仅生成卸载程序,不打包主安装包 OutputBaseFilename=unins000 UninstallOutputDir={OutputDir} #else [Setup] ; 正常编译主安装包的配置 OutputBaseFilename=MyAppSetup #endif在GitHub CI流程中分三步执行:
- 第一步:生成未签名的卸载程序
ISCC.exe /DGenerateUninstallerOnly MyApp.iss - 第二步:调用SignPath CLI完成卸载程序签名,替换原文件
# 提交卸载程序到SignPath signpath-cli submit --artifact "./output/unins000.exe" --project "MyApp" --policy "SignUninstaller" # 等待签名完成 signpath-cli wait --artifact "./output/unins000.exe" --project "MyApp" # 下载签名后的文件覆盖原卸载程序 signpath-cli download --artifact "./output/unins000.exe" --output "./output/unins000.exe" - 第三步:正常编译主安装包(自动使用已签名的卸载程序)
ISCC.exe MyApp.iss
- 第一步:生成未签名的卸载程序
方案二:解压已生成的安装包,签名卸载程序后重新打包
如果无法调整编译流程,可通过解压安装包提取卸载程序签名后重新打包:
编译未签名的主安装包
ISCC.exe MyApp.iss用
innounp解压安装包到临时目录innounp -x -d ./temp_unpack ./output/MyAppSetup.exe提取并签名卸载程序
- 从临时目录中找到卸载程序(通常路径为
./temp_unpack/$PLUGINSDIR/unins000.exe或根目录下的unins000.exe) - 上传该文件到SignPath完成签名,下载签名后的文件替换临时目录中的原文件
- 从临时目录中找到卸载程序(通常路径为
重新编译主安装包
修改Inno Setup脚本,指定已签名的卸载程序路径:[Setup] UninstallExe=./temp_unpack/$PLUGINSDIR/unins000.exe然后重新编译:
ISCC.exe MyApp.iss
方案推荐
优先选择方案一,它无需额外的解压/重新打包操作,流程简洁可控,完全适配CI环境的自动化需求,避免了二进制文件修改可能带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Phillipus
相关产品推荐
相关产品推荐

