В моем файле .nsi я вызываю ExecWait '"$INSTDIR\application.exe" ' $0
. В application.exe я возвращаю коды выхода для успеха и неудач. Как поймать эти коды выхода в файле .nsi.
как получить код выхода другого приложения в nsis
Ответы (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
я передаю целое число 1 как успех и целое число 2 как неудачу, но когда я выполняю код выше ExecWait, я всегда получаю 0 в качестве его значения. Не могли бы вы сказать мне, как мне отправить возвращаемое значение в приложении (код C++)
- person user1234; 30.01.2012
Я не эксперт по С++, но я полагаю, что использование функции возврата - это способ указать код выхода.
- person Paul Hunt; 30.01.2012
мне не нужно точно знать C++, любой другой язык программирования тоже подойдет. Я возвращаю код ошибки из функции моего приложения. Я вызываю это приложение в своем файле .nsi, но не получаю код ошибки, который отправляю. Пожалуйста, помогите мне
- person user1234; 31.01.2012
Не могли бы вы вставить отрывок из
main()
вашей программы на С++? По сути, в конце кода, если вы поместите return 42;
, это значение 42 должно быть перехвачено в переменной, которую вы даете ExecWait
- person Seki; 31.01.2012