For info, did you set fMask to SEE_MASK_NOCLOSEPROCESS
, so that hProcess is valid?
Also, why are you P/Invoke'ing to ShellExecuteEx, why not use Process.Start w/ ProcessStartInfo, which will handle ShellExecuteEx for you?
EDIT: Since you are doing runas, you only get SYNCHRONIZE access on the handle, not PROCESS_QUERY_INFORMATION
access, hence GetExitCodeProcess fails, which results in hasEnded throwing a Win32 exception.
As a workaround, you could P/Invoke WaitForSingleObject with a timeout of zero to see if the process has exited.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…