【发布时间】:2015-01-29 22:01:16
【问题描述】:
在我们当前的设置构建过程 (WiX 3.9) 中,某些文件会经过数字签名。为避免再次对未更改的文件进行签名,我想检查每个文件的签名,如果已签名则跳过签名。
我尝试使用signtool.exe verify /pa filename.exe 检查文件是否已经签名,如果没有签名,signtool 会返回一个非零的 ERRORLEVEL。我想我可以在调用后检查错误代码并妥善处理:
signtool.exe verify /pa %1
IF ERRORLEVEL 0 goto already_signed
rem Sign file now
[...]
goto finished
:already_signed
echo File %1 is already signed, skipping
:finished
如果找到签名并且 signtool 返回 0,这可以正常工作。但是如果没有找到签名,导致 ERRORLEVEL 非零,MSBuild 会立即注意到这一点并显示错误消息:EXEC : SignTool error : No signature found. 一步之后,构建由于签名批处理文件中的 -1 返回码而失败。然而,就构建过程而言,没有错误需要被视为错误。
我已经尝试在signtool verify 调用后将 ERRORLEVEL 重置为 0,但这不起作用。有什么想法吗?
【问题讨论】:
-
如何重置
ERRORLEVEL?忽略批处理文件中任何错误的一种方法是在末尾添加exit /b 0。它对你有用吗?
标签: batch-file msbuild wix signtool