signtool:选项解释为 AppVeyor 上的文件

signtool: options interpreted as files on AppVeyor

我在 AppVeyor 构建(Visual Studio 2019)上有这种超级奇怪的行为:在 shell 脚本(cmd.exe)中,当使用 [=11 签署我的应用程序时=],所有选项都被解释为文件(signtool 可以一次签署多个文件)。

"$WINDOWSKITBIN\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd SHA256 /n "Jan Gerner" /v /debug "build\TypeWorld.exe" 产生:

Successfully signed: build\TypeWorld.exe
Number of files successfully Signed: 1
Number of errors: 10
SignTool Error: File not found: C:/Program Files/Git/tr
SignTool Error: File not found: http://timestamp.digicert.com
SignTool Error: File not found: C:/Program Files/Git/td
SignTool Error: File not found: sha256
SignTool Error: File not found: C:/Program Files/Git/fd
SignTool Error: File not found: SHA256
SignTool Error: File not found: N:/
SignTool Error: File not found: Jan Gerner
SignTool Error: File not found: V:/
SignTool Error: File not found: C:/Program Files/Git/debug

想要的文件 TypeWorld.exe 已签名,只是没有所有选项,所有选项都被解释为要签名的文件,显然找不到。

我已确认转义的反斜杠和文件夹变量是正确的。

这一行echo "$WINDOWSKITBIN\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd SHA256 /n "Jan Gerner" /v /debug "build\TypeWorld.exe"

产生预期的渲染:C:\Program Files (x86)\Windows Kits\bin.0.19041.0\x86\signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd SHA256 /n Jan Gerner /v /debug build\TypeWorld.exe

我在 PowerShell 中尝试了 运行 同样的结果。

None AppVeyor 员工推荐(也通过电子邮件)的帮助。

最终有帮助的是不要混合 Windows 和 Linux (WSL) 环境。在 appveyor.yml 中,我通过 sh 调用构建脚本(或稍后在 AppVeyor 工作人员的推荐下 bash):

build_script: 
    - cmd: C:\msys64\usr\bin\bash.exe wxPython/build/Windows/build-all.sh

相反,对于某些命令,最好保持简单,所以我将代码签名部分转换为一个很好的旧 Windows 批处理文件:

build_script: 
    - wxPython/build/Windows/build-sign.bat

在批处理文件中,行 signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd SHA256 /n "Jan Gerner" /v "build\TypeWorld.exe" 执行得很好。