Re: [PATCH 1/8] CMD.exe: Attempt launch even if fails to locate program
Jason Edmeades <us(a)edmeades.me.uk> writes:
+ /* Internal programs wont be picked up by this, so try one final + createprocess and wait for it to complete. + Note: Ideally we could tell between a console app (wait) and a + windows app, but the API's for it fail in this case */ + ZeroMemory (&st, sizeof(STARTUPINFO)); + st.cb = sizeof(STARTUPINFO); + init_msvcrt_io_block(&st); + + /* Launch the process and assume CUI so wait on it to complete */ + status = CreateProcess (NULL, command, NULL, NULL, TRUE, + 0, NULL, NULL, &st, &pe); + + if ((opt_c || opt_k) && !opt_s && !status && + GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') { + /* strip first and last quote characters and try again */ + WCMD_opt_s_strip_quotes(command); + opt_s=1; + WCMD_run_program(command, called); + return; + } + + /* If it still fails, give up */ + if (!status) { + SetLastError(ERROR_FILE_NOT_FOUND); + WCMD_print_error (); + /* If a command fails to launch, it sets errorlevel 9009 - which + does not seem to have any associated constant definition */ + errorlevel = 9009; + return; + } + + /* Wait for it to end */ + WaitForSingleObject (pe.hProcess, INFINITE); + GetExitCodeProcess (pe.hProcess, &errorlevel); + if (errorlevel == STILL_ACTIVE) errorlevel = 0; + CloseHandle(pe.hProcess); + CloseHandle(pe.hThread);
You should use the existing CreateProcess code instead of duplicating it all. -- Alexandre Julliard julliard(a)winehq.org
participants (1)
-
Alexandre Julliard