且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

CreateProcess 成功,但 GetExitCodeProcess 返回 C0000142

更新时间:2023-02-16 20:17:24

Error 0xC0000142 is STATUS_DLL_INIT_FAILED(我使用 错误代码查找工具).一个快速的谷歌发现 这个问题,其中说:

Error 0xC0000142 is STATUS_DLL_INIT_FAILED (I determined this using the Error Code Lookup Tool). A quick google found this question, which says:

此问题的最常见原因是链接到 user32.dll 的程序在无法与系统的窗口站和桌面对话的上下文中运行.通常,诸如代理之类的服务在其自己的窗口站和桌面中运行,并且 user32 程序运行良好,但是任何显示对话框的程序都会挂起,而人们没有机会看到错误消息或关闭对话框.

The most common cause of this problem is that a program that links to user32.dll was run in a context in which it could not talk to the system's window station and desktop. Normally, a service such as the agent runs in its own window station and desktop, and user32 programs run fine, but any program that displayed a dialog box would then hang without any opportunity for a human being to see the error message or close the dialog.

因此,如果您没有使用 user32.dll 中的任何函数,您应该删除该依赖项.如果您正在使用该 DLL,那么我不确定您应该做什么.一种选择是使用 LoadLibrary 动态加载 DLL,并在成功时使用它(即您有一个有效的窗口会话),或者在失败时回退到失败模式.

So, if you're not using any functions from user32.dll, you should remove that dependency. If you are using that DLL, then I'm not really sure what you're supposed to do. One option would be to load the DLL dynamically with LoadLibrary and use it if it succeeds (i.e. you have a valid window session) or to fallback on a failure mode if it fails.