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

GitHub CI环境下如何用SignPath为Inno Setup卸载程序签名?

解决Inno Setup卸载程序的SignPath签名问题(GitHub CI环境)

针对你在GitHub CI中遇到的Inno Setup卸载程序无法通过SignPath签名的问题,以下是两种可行的解决方案:

方案一:拆分编译流程,先签名卸载程序再打包主安装包

这种方式直接在编译环节插入签名步骤,通过参数控制分阶段执行,无需中断脚本:

  1. 修改Inno Setup脚本,添加自定义编译参数控制是否仅生成卸载程序:

    #ifdef GenerateUninstallerOnly
    [Setup]
    ; 仅生成卸载程序,不打包主安装包
    OutputBaseFilename=unins000
    UninstallOutputDir={OutputDir}
    #else
    [Setup]
    ; 正常编译主安装包的配置
    OutputBaseFilename=MyAppSetup
    #endif
    
  2. 在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
      

方案二:解压已生成的安装包,签名卸载程序后重新打包

如果无法调整编译流程,可通过解压安装包提取卸载程序签名后重新打包:

  1. 编译未签名的主安装包

    ISCC.exe MyApp.iss
    
  2. 用innounp解压安装包到临时目录

    innounp -x -d ./temp_unpack ./output/MyAppSetup.exe
    
  3. 提取并签名卸载程序

    • 从临时目录中找到卸载程序(通常路径为./temp_unpack/$PLUGINSDIR/unins000.exe或根目录下的unins000.exe)
    • 上传该文件到SignPath完成签名,下载签名后的文件替换临时目录中的原文件
  4. 重新编译主安装包
    修改Inno Setup脚本,指定已签名的卸载程序路径:

    [Setup]
    UninstallExe=./temp_unpack/$PLUGINSDIR/unins000.exe
    

    然后重新编译:

    ISCC.exe MyApp.iss
    

方案推荐

优先选择方案一,它无需额外的解压/重新打包操作,流程简洁可控,完全适配CI环境的自动化需求,避免了二进制文件修改可能带来的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:31:15