NSIS: Отслеживание кода возврата исполняемого приложения.
В процессе установки иногда приходится вызывать внешние приложения, например, какую-нибудь утилиту для настройки системы, и так далее.
При вызове внешней программы надо отследить ее работу, завершена ли она корректно, или же в процессе выполнения произошла ошибка. Могу привести довольно древний пример из своего опыта, когда-то программы распространялись на CD, и производитель материнской платы давал диск с "бонусным" софтом. Но в инсталлятор была встроена программа, определявшая модель материнской платы - если модель не совпадала, установщик "халявных" программ отказывался что-либо устанавливать. Когда я распаковал установщик и проанализировал это дело, выяснилось, что установщик сначала распаковывал и запускал внешнюю утилиту, которая проверяла модель мать-доски. И возвращала код выхода:
0 - правильная мать-доска, 1 - неправильная.Вызов внешнего приложения выполняется командой
ExecWait "путь_и_имя_файла параметры_программы" [переменная_для_кода_возврата]Например:
ExecWait "$TEMP\retcode.exe 42"Второй параметр - переменная для сохранения кода возврата вызванной программы, т.е. если мы хотим вызывать программу и анализировать ее код завершения, надо действовать так:
;...
ExecWait "$TEMP\retcode.exe 42" $0Далее анализируем содержимое переменной
$0.Пример инсталлятора на GitHub
Reference/ExecWait
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/11/05/nsis-o