2

Я создал файл с информацией о версии, как описано здесь, - What does a "version file" look like? и получил EXE-файл со всей информацией о версии.Ошибка компилятора при использовании GetStringFileInfo в InnoSetup для приложения, созданного с помощью PyInstaller

Мой вопрос следующий, когда я пытаюсь построить файл установки с InnoSetup, я получаю сообщение об ошибке:

Error on line 65 in d:\installation\Source\setup_script.iss: Missing closing quote on parameter "Name"

линии 65:

[Icons] 
Name: "{group}\{#VerInfoProductName}"; Filename: "{app}\{#ExeFileName}.exe"; WorkingDir: "{app}" 

Определение из VerInfoProductName ниже

#define VerInfoProductName GetStringFileInfo(AddBackslash(SourcePath) + "..\..\dist\app\testapp.exe", "ProductName") 

Подробности прилагаются in archive.

+0

Обновлено описание по строке 65. Спасибо! – SpanishBoy

+0

Пожалуйста, приложите детали. – SpanishBoy

ответ

2

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

Препроцессор загружает ProductName таким образом, чтобы результирующая переменная была на самом деле длиннее значения, а оставшееся пространство заполнялось каким-то мусором, который позже смущает компилятор.

Вы можете обойти это, используя {#SetupSetting('AppName')} вместо {#VerInfoProductName}. Это, конечно, предполагает, что AppName установлен в {#VerInfoProductName}.

Другой способ редиректа строка через файл INI:

#expr WriteIni("C:\path\xxx.ini", "xxx", "xxx", VerInfoProductName) 
#define VerInfoProductName ReadIni("C:\path\xxx.ini", "xxx", "xxx") 

На самом деле в обычных файлах ресурсов Windows (.rc), один имеет явно нуль-Прекратить Информация о версии строки (обратите внимание \0):

VALUE "ProductName", "TestProductName\0" 

в результате нуль (\0) характер явно хранится в полученном двоичном виде. Таким образом, в конечном итоге в результирующем двоичном файле есть два нулевых символа (четыре байта в кодировке UTF-16). Это обычный формат WinAPI, когда допускается несколько значений. Нулевой символ - разделитель значений, double-null завершает последовательность.

Ваш TestApp.exe отсутствует, что второй null. Я вижу это в шестнадцатеричной дампе. Я уверен, что это основная причина вашей проблемы.

+0

Вы правы. Я пропустил проверку предварительно обработанного сценария. Сценарий был скомпилирован при использовании этой переменной в другом разделе, но записи были отрезаны. – TLama

+0

Я тоже думал об этом. Спасибо вам, ребята! Необходимо настроить код python. – SpanishBoy

+0

@SpanishBoy. Добро пожаловать. Подумайте о подтверждении результатов в [Что означает «файл версии»?] (Http://stackoverflow.com/a/14626175/850848) –