У меня есть exe, который нуждается VC++
среда для запуска и в противном случае вылетает.
Если я запускаю его не в среде VC ++, из командной строки или из кода C ++ CreateProcess функция, очевидно, происходит сбой и системное сообщение об ошибке показано, как показано ниже
Но когда я выполняю это из ExecWait
в сценарии NSIS его просто выполняет. Exe должен все еще сбой, но он не показывает никаких сообщений об ошибках.
Если я прав ExecWait
а также использует CreateProcess
функционировать внутри. Тогда почему эта разница?
Есть ли флаг в CreateProcess
Функция, которую нужно передать, чтобы получить это поведение?
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 существуют, дочерний процесс также должен их забрать …
Ошибочные предположения.
Приложение не падает. Не удается начать.
Он не должен работать в VC ++, он просто должен иметь доступную стандартную DLL. NSIS, вероятно, нужна та же DLL, и делает поставляется с этой DLL.