簡體   English   中英

如何在C#中等待CreateProcessAsUser完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM