Подпись с полным путем с пробелами к signtool.exe завершается неудачно из-за «Ошибка Sign Tool с кодом выхода 0x1» в Inno Script Studio - PullRequest
1 голос
/ 14 июля 2020

В Inno Setup мой инструмент подписи определяется как:

cmd /k "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f

Предварительная настройка cmd /k (как предлагается в Inno Setup - Ошибка подписи с "Ошибка Sign Tool с кодом выхода 0x1" ) показывает, что нет на самом деле проблема с самим инструментом подписи, а скорее с тем, как Inno Setup вызывает его, генерируя следующее сообщение:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

Очевидно, он обрезает путь к signtool в первый пробел, хотя я заключил его в кавычки. Я даже попытался заменить кавычки на $q, чтобы посмотреть, имеет ли это значение. (Это не так.) Я бы подумал, что это неправильное поведение парсера, чтобы опозорить кавычки, поскольку в инструкциях четко говорится, что нужно вставлять точный текст, который вы бы использовали в командной строке, а сам пример включает кавычки (https://revolution.screenstepslive.com/s/revolution/m/10695/l/563371-signing-installers-you-create-with-inno-setup).

Все прекрасно работает из командной строки. По какой-то причине Inno Setup просто неправильно вызывает signtool.

ДОБАВЛЕНО 2020-07-14:

Пример Inno Setup, скопированный с их веб-сайта:

"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\signtool.exe" sign /f "C:\MY_CODE_SIGNING.PFX" /t http://timestamp.comodoca.com/authenticode /p MY_PASSWORD $f

Моя версия, использованная без cmd /k:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f

Как видите, мы используем кавычки таким же образом. Я проверю наличие обновлений - наверное, я должен был это сделать первым. Когда у меня будет время, я верну определение signtool и посмотрю, исправит ли это обновление.

Кроме того, я должен был быть более ясным. Я новичок в Inno Setup, и мне не приходило в голову разъяснять это. Я компилирую через Inno Script Studio. Мне приходит в голову, что есть некоторая вероятность, что это связано с поведением в определенной c версии Script Studio, а не с самим компилятором, но я недостаточно знаю о внутренней работе, чтобы делать что-то большее, чем предполагать.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Поработав немного больше, я теперь совершенно уверен, что это ошибка Inno Setup. Я реализовал обход следующим образом:

  1. Открыть окно команд с повышенными привилегиями
  2. Перейдите в каталог, который я создал без пробела в имени: cd \bin
  3. Создайте символ без пробелов c ссылку на каталог, в котором находится signtool.exe: mklink /d "Windows10SDK" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64"
  4. Введите новое определение инструмента подписи, в котором используется символ c ссылка:

C:\bin\Windows10SDK\signtool.exe sign /t http://timestamp.comodoca.com /n "My Company" $f

И все! Поскольку в пути к signtool.exe больше нет пробела, Inno Setup теперь выполняет подпись правильно, и все работает прекрасно.

Я сообщу об этом как об ошибке и при необходимости обновлю.

0 голосов
/ 14 июля 2020

Я использую:

#define SignedDesc "$q" + MSA + "$q"
#define SignedPfx "$qd:\My Certificate\2018\My Certificate.pfx$q"
#define SignedTimeStamp "$qhttp://timestamp.verisign.com/scripts/timestamp.dll$q"
#define SignedPw "$q~~~~~~~$q"

SignTool=SignTool /d {#SignedDesc} /du $q{#AppURL}$q /f {#SignedPfx} /p {#SignedPw} /t {#SignedTimeStamp} /v $f

Мой инструмент подписи настроен как:

$qC:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\Signtool.exe$q sign $p

Вы должны использовать $q, который является кавычкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...