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

GitHub Action运行signtool.exe遭遇ParserError问题求助

问题:GitHub Action中使用signtool签名Windows二进制文件失败

我尝试创建一个使用signtool的GitHub Action工作流(市场上的现有工具都不适用),对应的工作流代码如下:

- name: Sign Windows Binary
  run:  |
    "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" sign /a /td sha256 /fd sha256 /v /f "win-cert.p12" /p "${{ secrets.CERTPASSWD }}" /v "RelayKeys setup.exe"

运行后出现解析错误:

ParserError: D:\a\_temp\63b9a5c1-d675-443f-9f82-b82bac3b1007.ps1:2
Line |
   2 |  … (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" sign /a /td  …
     |                                                             ~~~~
     | Unexpected token 'sign' in expression or statement.

之前用同样方式运行其他命令行程序都正常,想知道哪里出问题了?是不是和斜杠转义有关?


解决方案

这个错误是因为GitHub Action的Windows runner默认用PowerShell执行命令,你直接用双引号包裹exe路径后接参数的写法,在PowerShell里会被当成纯字符串处理,不会识别为“执行exe+参数”的指令。有两种简单的修正方式:

方式一:用PowerShell的调用操作符&

在带空格的exe路径前加&,告诉PowerShell这是要执行的可执行文件,后面接参数即可:

- name: Sign Windows Binary
  run:  |
    & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" sign /a /td sha256 /fd sha256 /v /f "win-cert.p12" /p "${{ secrets.CERTPASSWD }}" "RelayKeys setup.exe"

注意:你原来的命令里重复写了/v参数,建议删掉其中一个,避免冗余。

方式二:切换到CMD执行

在步骤里指定用cmd作为shell,这样就能沿用你原来的命令写法:

- name: Sign Windows Binary
  run:  |
    "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" sign /a /td sha256 /fd sha256 /v /f "win-cert.p12" /p "${{ secrets.CERTPASSWD }}" "RelayKeys setup.exe"
  shell: cmd

额外建议

不要硬编码Windows Kits的版本号(比如10.0.17763.0),可以用runner自带的环境变量动态获取路径,避免因runner环境版本更新导致路径失效:

- name: Sign Windows Binary
  run:  |
    & "$env:WINDOWSSDKDIR\bin\$env:WINDOWSSDKVERSION\x86\signtool.exe" sign /a /td sha256 /fd sha256 /v /f "win-cert.p12" /p "${{ secrets.CERTPASSWD }}" "RelayKeys setup.exe"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:31