Сбой signtool с Inno Setup с кодом выхода 0x1

Внезапно мой компилятор Inno Setup перестал работать. Так как в последний раз я использовал его, я только что установил новый сертификат, выданный еще той же компании.

Я настроил инструмент подписи следующим образом (NAME - начало строки для субъекта в сертификате):

mysigntool="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /v /a /s my /n NAME /t http://timestamp.verisign.com/scripts/timestamp.dll

А затем в файле.iss Inno Setup у меня есть:

SignTool=mysigntool
SignedUninstaller=yes

Знак всегда завершается ошибкой с кодом выхода 0x1, даже если я удаляю /t и отметку времени. Обратите внимание: если я запускаю ту же команду из командной строки, подпись работает отлично.

3 ответа

Решение

Вам нужно добавить $f до конца вашего SignTool (в настройках IDE, а не в скрипте), чтобы фактически передать имя файла для подписи. Вот почему вы получаете сообщение об ошибке "отсутствует имя файла".

Смотрите примеры в справочном файле Inno.

Первое, что нужно попробовать, это, очевидно, запустить signtool.exe автономно, чтобы увидеть, какие ошибки он выводит.

(Я знаю, что вы уже попробовали это).


Если вы не можете воспроизвести проблему таким образом, запустите компилятор Inno Setup из командной строки. Ты увидишь signtoolвывод вместе с выводом других компиляторов.

Если signtool происходит сбой, при компиляции из Inno Setup GUI, его консоль просто мигает, поэтому у вас нет шансов увидеть его вывод.


Кроме того, вы можете обернуть signtool.exe в пакетный файл и вызвать пакет из Inno Setup вместо signtool, В конце командного файла позвоните pause, если подпись не удалась. Таким образом, вы можете увидеть ошибку даже в Inno Setup GUI.

Пакетный файл может выглядеть так:

@echo off

c:\path\signtool.exe %*

set SIGN_RESULT=%ERRORLEVEL%

if %SIGN_RESULT% equ 0 (
  echo Signing succeeded
  exit /B 0
)

echo Signing failed with %SIGN_RESULT%
pause

exit /B %SIGN_RESULT%

См. Также Inno Setup - Сбой подписания с помощью "Sign Tool не удалось с кодом выхода 0x1".

В Windows 10 SDK и более поздних версиях необходимо указатьfdпараметр. Например:signtool.exe sign /debug /fd SHA256 /f "C:\selfcert.pfx" /t http://timestamp.comodoca.com/authenticode /p mypassword1234! myfile.exe

Из https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool :

Для Windows 10 SDK, Windows 10 HLK, Windows 10 WDK и Windows 10 ADK сборки 20236 и более поздние версии требуют указания алгоритма дайджеста. Команда подписи SignTool требует, чтобы во время подписания и отметки времени были указаны алгоритм дайджеста файла /fd и параметр алгоритма дайджеста /td timestamp соответственно. Предупреждение (первоначально код ошибки 0) будет выдано, если /fd не указан во время подписания и если /td не указан во время отметки времени. В более поздних версиях SignTool предупреждение станет ошибкой. SHA256 рекомендуется и считается в отрасли более безопасным, чем SHA1.

Другие вопросы по тегам