我有一个需要VC++
环境运行的exe,否则会崩溃。
如果我在非VC ++环境中,从命令行或从C ++代码CreateProcess函数运行它,它显然会崩溃并且系统错误消息如下所示
但是当我在NSIS脚本中从ExecWait
执行它时,它只是执行它。 exe必须仍然崩溃,但它没有显示任何错误消息。
如果我正确ExecWait
内部使用CreateProcess
功能。那为什么会有这种差异?
CreateProcess
函数中是否有任何标记需要传递才能获得此行为?
答案 0 :(得分:3)
NSIS没有传递任何特殊标志:
StartUp.cb=sizeof(StartUp);
if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &StartUp, &ProcInfo)) ...
但在达到这一点之前,SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS);
可能会影响事情。
要记住的另一件事是NSIS脚本中的SetOutPath
指令也会更改进程工作目录,因此如果将其设置为存在这些dll的路径,则子进程应该将它们接收还有...
答案 1 :(得分:0)
有缺陷的假设。
应用程序不会崩溃。它无法启动。
它不需要在VC ++中运行,它只需要有一个标准的DLL。 NSIS可能需要相同的DLL,并且 附带该DLL。