Решения в ответе @ Адриана (фактически скопированные из ответа @ TLama на аналогичный вопрос ) верны для многих ситуаций.
Но это не сработает для [Run]
задачи с флагом runasoriginaluser
(что подразумевается под флагом postinstall
). То есть переменная не будет распространяться на приложение с общим «Запустить мою программу» на странице «Готово».
Причина в том, что задачи с runasoriginaluser
выполняются с помощью невыполненного скрытого родительского процесса установщика Inno Setup. SetEnvironmentVariable
изменит среду для установщика, но не для его родительского процесса. К сожалению, родительский процесс установщика нельзя контролировать (imo).
В качестве обходного пути для установки переменной для задач runasoriginaluser
вам необходимо ввести промежуточный процесс между родительским процессом установщика и задание и промежуточный процесс задает переменную.
Такой промежуточный процесс может легко быть cmd.exe
с его командой set
:
[Run]
Filename: "{cmd}"; Parameters: "/C set MYVAR=MyValue & ""{app}\MyProg.exe"""; \
Description: "Run My Program"; Flags: postinstall runhidden
Флаг runhidden
скрывает окно консоли cmd.exe
, а не приложение (если оно является графическим приложением). Если это консольное приложение, используйте start
, чтобы запустить его в своем собственном (видимом) окне консоли.
Вы должны использовать устаревший компилятор Frege.
Я предлагаю вам получить последний компилятор здесь: https://github.com/Frege/frege/releases/tag/3.25alpha
(я только что попробовал «Три» пример, и это скомпилировано нормально)