Inno Setup - Пакетные файлы после компиляции с переменной в качестве параметра - Параметр не преобразован в значение переменной - PullRequest
0 голосов
/ 06 июня 2018

У меня есть сценарий установки, чтобы сгенерировать настройку, это прекрасно работает.Теперь я создал скрипт PowerShell, который принимает 2 параметра: «программа» - название программы и «версия», версия программы.Сценарий PowerShell просто копирует файлы куда-нибудь в зависимости от версии.

В Inno Setup Studio я пытаюсь запустить сценарий PowerShell после компиляции в разделе [PostCompile] со следующей строкой:

[PostCompile]    
Name: "copysetups.cmd"; Parameters: "Program {#AppVers} "; Flags: cmdprompt redirectoutput

Пакетный файл вызывается, но переменная не заменяется своим значением, после чего в окне сообщений Inno Script Studio отображается вывод:

powershell.exe .\copySetups.ps1 -program Program -version {#AppVer}

Я также пытался сделать это через "code: вот так:

[PostCompile]
Name: "copysetups.cmd"; Parameters: "Program ""{code:GetAppVersion}"""; Flags: cmdprompt redirectoutput

Функция:

function GetAppVersion( Param: String ): String;
begin
  Result := '{#AppVer}';
end;

Но это тоже не работает, вывод опять не со значением из функции.

powershell.exe .\copySetups.ps1 -program Program -version {code:GetAppVersion} 

1 Ответ

0 голосов
/ 06 июня 2018

Inno Setup Studio не поддерживает препроцессор в разделе [PostCompile].См. Также Inno Setup copy OutputBaseFileName в разделе PostCompile .

И никак не может {code:...} работать, так как константы (как и любой код Pascal Script) оцениваются только во время выполнения.


Почему бы вам не заставить скрипт PowerShell читать версию из скомпилированного .exe?

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("mysetup.exe").ProductVersion
...