【问题标题】:SignTool.exe Sporadically Fails with Exit Code 1SignTool.exe 偶尔失败,退出代码为 1
【发布时间】:2012-02-21 16:01:50
【问题描述】:

作为我们构建系统的一部分,我们使用带有证书的 signtool.exe 在构建二进制文件后对其进行签名。偶尔(很难说什么时候会罢工),签约失败:

 error MSB3073: The command "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\signtool.exe" [...] exited with code 1.

根据 MSDN,退出代码 1 表示签署文件时出错。我可以验证该文件没有被签名。

我还注意到,有时时间戳部分会超时并显示不同的错误消息,尽管文件仍会被签名(没有时间戳)。

如何排除和修复这些看似随机、不一致的签名失败?

【问题讨论】:

  • 我也有同样的经历:signtool 在时间戳期间偶尔会失败。除了重新运行signtool之外似乎没有其他解决方案。
  • @EugeneMayevski'EldoSCorp 有些人报告说更新他们的 Windows XP 证书是可行的,还有一些其他类似的奇怪东西。我想要一个明确的答案,因为失败的构建对我来说非常严重。但我担心你是对的。
  • 假设您的时间戳服务器完全无法访问(网络电缆被拔掉等)。用于相同目的的 signtool 或其他工具将如何处理这个问题?当然,我希望 signtool 能够更容忍失败并尝试再次执行时间戳,但无论如何您必须为可能的时间戳失败做好准备。
  • 是的。也许答案是在更高的层次上解决这个问题,比如在持续集成服务器上。不过,我仍然希望有一个较低级别的解决方案。

标签: cruisecontrol.net digital-certificate signtool


【解决方案1】:

我强烈怀疑与时间戳服务器的连接失败是导致偶尔失败的原因。也许您在有问题的时间检查系统事件日志是否有丢失的连接。

【讨论】:

  • 如果是这种情况,我将如何纠正?我不控制时间戳服务器。
  • 几乎可以是任何东西。检查您的基础设施。我们曾经遇到过网络电缆有缺陷的问题。那很简单。由于维护,可能是本地停机。可能是您的 Internet 提供商的问题。我的建议(正如 Eugene Mayevski 'EldoS Corp 解释的那样):实施重试机制。不要让程序集签名成为您流程中时间关键的部分。
  • 您能否编辑您的答案以提及构建过程应该更加健壮?这就是我最终所做的。
  • 嗯,我的signtool 版本not 在时间戳失败时会给出失败退出代码。事实上,它假装一切都很好,这是一个主要的烦恼。
【解决方案2】:

我遇到了同样的问题。发生这种情况是因为 MS 反恶意软件进程 MsMpEng.exe 检查二进制文件并且不让任何人访问它。 为了解决这个问题,我在 RAM 磁盘上构建了二进制文件并且它工作了。

【讨论】:

    【解决方案3】:

    我刚刚在 Windows 8.1 上解决了这个问题,所以这不是一些人提到的 Windows XP 根证书问题。

    我发现问题是因为被签名的 .exe 也在运行。

    如果您在 cmd 提示符下运行 signtool 并尝试对其进行签名,您将收到一条有用的短信,告诉您出了什么问题(比 CreateProcess() 的返回码 1 好得多。

    停止正在运行的进程,并且能够正常签名。

    【讨论】:

      【解决方案4】:

      就我而言,解决方案中的 .pfx 文件是旧文件。在有人告诉我用新的有效证书文件替换证书文件之前,我一直收到“退出代码 1 失败”错误。

      意思是,确保证书文件有效且未过期。

      【讨论】:

        猜你喜欢
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2020-07-16
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多