Если при выполнении ExecWait произошла ошибка, содержимое переданной пользовательской переменной не определено.
Чтобы просто проверить, правильно ли выполнена программа, проверьте флаг ошибки. (кстати, NSIS ожидает ноль для успеха и ненулевой для ошибки)
ClearErrors
ExecWait '"$INSTDIR\application.exe"'
IfErrors 0 noError
; Handle error here
noError: