[英]How to wait for CreateProcessAsUser to complete in C#
我正在使用以下函數來啟動特定的exe。 在進入下一組代碼之前,我需要等待此過程完成。 我如何等待該過程完成?
[DllImport("advapi32.dll", EntryPoint = "CreateProcessAsUser", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
extern static Boolean CreateProcessAsUser(IntPtr hToken, String lpApplicationName, String lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes,
ref SECURITY_ATTRIBUTES lpThreadAttributes, Boolean bInheritHandle, Int32 dwCreationFlags, IntPtr lpEnvironment,
String lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);
從方法返回的PROCESS_INFORMATION
結構還包含已創建進程的句柄及其ID。 所以你可以這樣做:
Process.GetProcessById(procInfo.dwProcessId).WaitForExit()
但請注意,如果在您接到此呼叫之前該過程終止,則可能遠程可能會獲得不同的過程。 所以最好做一些驗證,以防萬一:
var process = Process.GetProcessById(procInfo.dwProcessId);
if (process.Handle == procInfo.hProcess)
process.WaitForExit();
// The process has definitely exited by now
但是,您根本不必使用CreateProcessAsUser
。 您可以使用允許您指定用戶名和密碼的Process.Start
重載 - 這應該是在C#中使用不同用戶啟動進程的首選方法。 您還可以使用ProcessStartInfo
指定用戶名和密碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.