В нашем текущем процессе сборки установки (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 код возврата из пакетного файла подписи. Однако с точки зрения процесса сборки не было ошибок, которые нужно было бы рассматривать как ошибки.
Я уже пытался сбросить ERRORLEVEL на 0 после вызова signtool verify
, но это не работает. Любые идеи?
ERRORLEVEL
? Один из способов игнорировать любые ошибки в командном файле — поставитьexit /b 0
в конце. Работает ли это для вас? - person seva titov   schedule 29.01.2015