I’m trying to start a user-mode process from a service using CreateProcessAsUser() API similar to this code. My code works fine in 99% of the time, except at times that API succeeds, I get the process handle from the PROCESS_INFORMATION struct but the process itself doesn’t appear in the interactive user session that I was intending it to run in.
The interesting thing is that if I call GetExitCodeProcess() on the process handle it succeeds with return code 0xC0000142. Any idea why?
Error 0xC0000142 is
STATUS_DLL_INIT_FAILED(I determined this using the Error Code Lookup Tool). A quick google found this question, which says: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 withLoadLibraryand use it if it succeeds (i.e. you have a valid window session) or to fallback on a failure mode if it fails.