首页 > 解决方案 > SignTool 零星报 EXEC 这个文件格式无法签名,因为无法识别

问题描述

作为持续集成过程的一部分,我正在使用该signtool实用程序对 Teamcity 上的 MSI 和 EXE 文件进行签名。大多数情况下它按预期工作,但有时构建失败并显示以下错误消息。

[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。更令人困惑的是,当我登录到构建机器并使用相同的命令行签署相同的可执行文件时,它会成功签署而没有任何问题。

标签: signtool

解决方案


在不同的背景下发生了非常相似的事情。在那里,一个可执行文件也突然变得无法使用,需要重新启动系统。

原因是进程停止并等待输出文件(在您的情况下,这将是签名的可执行文件)仍然打开的输入确认。确认从未出现(它是无头机器),并且该过程一直等到重新启动。

我们通过运行 Process Explorer 并检查所有包含不可写文件名的打开文件句柄来找出原因。那时我们发现它被另一个进程保持打开状态,并且终止第二个进程允许重新启动循环而无需重新启动整个机器。

最后,就我而言,是挂起进程的输入流出现故障;我们改变了工作流程,问题就消失了。

我建议一旦机器再次出现故障,您就运行 Process Explorer 并检查哪些进程处于活动状态以及它们在做什么。


推荐阅读