как получить код выхода другого приложения в nsis

В моем файле .nsi я вызываю ExecWait '"$INSTDIR\application.exe" ' $0 . В application.exe я возвращаю коды выхода для успеха и неудач. Как поймать эти коды выхода в файле .nsi.


person user1234    schedule 30.01.2012    source источник


Ответы (2)


Если при выполнении ExecWait возникает ошибка, то содержимое переданной пользовательской переменной не определено.

Чтобы просто проверить, правильно ли программа выполнена, проверьте флаг ошибки. (кстати, NSIS ожидает ноль в случае успеха и ненулевое значение в случае ошибки)

ClearErrors
ExecWait '"$INSTDIR\application.exe"'
IfErrors 0 noError
; Handle error here
noError:
person Daniel N    schedule 02.02.2012

Код выхода приложения будет храниться в переменной, которая передается в качестве второго аргумента ExecWait, поэтому в вашем примере $0.

http://nsis.sourceforge.net/Docs/Chapter4.html#4.9.1.4

person Paul Hunt    schedule 30.01.2012
comment
я передаю целое число 1 как успех и целое число 2 как неудачу, но когда я выполняю код выше ExecWait, я всегда получаю 0 в качестве его значения. Не могли бы вы сказать мне, как мне отправить возвращаемое значение в приложении (код C++) - person user1234; 30.01.2012
comment
Я не эксперт по С++, но я полагаю, что использование функции возврата - это способ указать код выхода. - person Paul Hunt; 30.01.2012
comment
мне не нужно точно знать C++, любой другой язык программирования тоже подойдет. Я возвращаю код ошибки из функции моего приложения. Я вызываю это приложение в своем файле .nsi, но не получаю код ошибки, который отправляю. Пожалуйста, помогите мне - person user1234; 31.01.2012
comment
Не могли бы вы вставить отрывок из main() вашей программы на С++? По сути, в конце кода, если вы поместите return 42;, это значение 42 должно быть перехвачено в переменной, которую вы даете ExecWait - person Seki; 31.01.2012