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

SignTool在TeamCity CI中偶发无法识别文件格式签名失败问题咨询

signtool间歇性签名失败问题诱因及解决方案

问题核心特征

CI环境下signtool签名偶发失败,后续所有构建均返回相同错误,重启机器恢复,手动执行相同命令签名正常,报错如下:

[09:04:00][Exec] C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\..\SigningTool\signtool.exe sign /f C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\..\Certificate\MyCompany.p12 /d "MyCompany" /p MyPassword!  /v /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\bin\Debug\MyProject.msi
[09:04:00][Exec] The following certificate was selected:
[09:04:00][Exec]     Issued to: MyCompany
[09:04:00][Exec] 
[09:04:00][Exec]     Issued by: Sectigo RSA Code Signing CA
[09:04:00][Exec] 
[09:04:00][Exec]     Expires:   Wed Apr 27 23:59:59 2022
[09:04:00][Exec] 
[09:04:00][Exec]     SHA1 hash: ***
[09:04:00][Exec] 
[09:04:00][Exec] 
[09:04:00][Exec] Done Adding Additional Store
[09:04:00][Exec] 
[09:04:00][Exec] Number of files successfully Signed: 0
[09:04:00][Exec] 
[09:04:00][Exec] Number of warnings: 0
[09:04:00][Exec] 
[09:04:00][Exec] Number of errors: 1
[09:04:00][Exec] 
[09:04:00][Exec] EXEC This file format cannot be signed because it is not recognized.
[09:04:00][Exec] EXEC An error occurred while attempting to sign: C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\bin\Debug\MyProject.msi
[09:04:00][Exec] 
[09:04:00][Exec] C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\packages\WiX.3.11.2\tools\wix2010.targets(2832, 5): error MSB3073: The command "C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\..\SigningTool\signtool.exe sign /f C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\..\Certificate\MyCompany.p12 /d "MyCompany" /p MyPassword!  /v /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 C:\TeamCity\buildAgent\work\f1f2a8269bd3cd0e\MyProject.Setup.AllUsers\bin\Debug\MyProject.msi" exited with code 1.

当前使用signtool版本为10.0.17763.132

问题诱因

  • Session 0会话句柄泄漏:TeamCity构建代理运行在后台服务专属的Session 0上下文,若前序构建任务异常终止,会持有待签名MSI/EXE的独占句柄,signtool无法正常读取文件内容时,会抛出格式不识别的错误。手动执行命令时处于用户交互会话,和后台服务会话的句柄空间隔离,因此可以正常签名。
  • 旧版signtool已知缺陷:10.0.17763版本的signtool存在加密上下文泄漏问题,连续多次执行签名操作后,内部证书解析、格式识别逻辑会进入异常状态,该状态会残留在当前会话环境中,导致后续所有签名请求均失败,只有重启系统释放会话资源才能恢复。
  • 时间戳服务异常连带报错:旧版signtool的错误捕获逻辑存在问题,当时间戳服务请求超时、返回异常时,会错误抛出“文件格式不识别”的报错,而非时间戳相关错误,且异常状态会被复用导致后续签名持续失败。

解决方案

临时修复方案(无需重启整机)

  • 构建失败后,重启TeamCity构建代理服务即可清除Session 0中的残留异常状态和泄漏句柄,恢复签名能力。
  • 在签名步骤前增加重试逻辑,最多重试3-5次,每次间隔2秒,可过滤偶发的时间戳异常导致的单次签名失败。
  • 签名前增加文件占用检测步骤,调用handle.exe工具强制关闭持有待签名文件句柄的异常进程。

根治方案

  • 升级signtool版本:替换为Windows SDK 10.0.19041及以上版本自带的signtool,该版本已修复加密上下文泄漏的已知缺陷,不会出现异常状态残留问题。
  • 独立进程执行签名:将签名步骤单独放在独立的临时进程中执行,每次签名完成后直接销毁进程,避免异常状态泄漏到后续构建任务。
  • 更换稳定时间戳服务,降低时间戳异常概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:03