NSIS: как ExecWait обрабатывает exe-файлы, которые в противном случае вылетали

У меня есть exe, который нуждается VC++ среда для запуска и в противном случае вылетает.

Если я запускаю его не в среде VC ++, из командной строки или из кода C ++ CreateProcess функция, очевидно, происходит сбой и системное сообщение об ошибке показано, как показано ниже

введите описание изображения здесь

Но когда я выполняю это из ExecWait в сценарии NSIS его просто выполняет. Exe должен все еще сбой, но он не показывает никаких сообщений об ошибках.

Если я прав ExecWait а также использует CreateProcess функционировать внутри. Тогда почему эта разница?

Есть ли флаг в CreateProcess Функция, которую нужно передать, чтобы получить это поведение?

0

Решение

NSIS не проходит никаких специальных флагов:

StartUp.cb=sizeof(StartUp);
if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &StartUp, &ProcInfo)) ...

но прежде чем он достигнет этой точки, он делает SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS); что может повлиять на вещи.

Другая вещь, которую нужно помнить, это то, что SetOutPath Инструкция в скрипте NSIS также изменяет рабочий каталог процесса, поэтому, если вы зададите для него путь, в котором эти dll существуют, дочерний процесс также должен их забрать …

3

Другие решения

Ошибочные предположения.

Приложение не падает. Не удается начать.

Он не должен работать в VC ++, он просто должен иметь доступную стандартную DLL. NSIS, вероятно, нужна та же DLL, и делает поставляется с этой DLL.

0

По вопросам рекламы [email protected]