Толик Панков
hex_laden
............ .................. ................
October 2030
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Толик Панков [userpic]
NSIS: Отслеживание кода возврата исполняемого приложения.

Преамбула


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

При вызове внешней программы надо отследить ее работу, завершена ли она корректно, или же в процессе выполнения произошла ошибка. Могу привести довольно древний пример из своего опыта, когда-то программы распространялись на CD, и производитель материнской платы давал диск с "бонусным" софтом. Но в инсталлятор была встроена программа, определявшая модель материнской платы - если модель не совпадала, установщик "халявных" программ отказывался что-либо устанавливать. Когда я распаковал установщик и проанализировал это дело, выяснилось, что установщик сначала распаковывал и запускал внешнюю утилиту, которая проверяла модель мать-доски. И возвращала код выхода: 0 - правильная мать-доска, 1 - неправильная.


Вызов внешнего приложения и получение его кода возврата из NSIS-установщика


Вызов внешнего приложения выполняется командой

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-otslezhivanie-koda-vozvrata-ispolnyaemogo-prilozheniya/

Tags: ,