使用CreateProcessAsUser时等待进程退出

sam*_*sam 5 c#

我在c#中使用CreateProcessAsUser通过我的服务需要等待进程退出的服务来启动进程,但我不知道我该怎么做,我不想使用检查进程列表中的进程existion

Chr*_*lor 8

PROCESS_INFORMATION手柄返回到新创建的进程(hProcess),你可以等待这个手柄将成为标志着进程退出的时候.

您可以使用SafeWaitHandle封装句柄,然后使用WaitHandle.WaitOne等待进程退出.

以下是如何包装进程句柄

class ProcessWaitHandle : WaitHandle
{
  public ProcessWaitHandle(IntPtr processHandle)
  {
    this.SafeWaitHandle = new SafeWaitHandle(processHandle, false);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后以下代码可以等待句柄

ProcessWaitHandle waitable = new ProcessWaitHandle(pi.hProcess);
waitable.WaitOne();
Run Code Online (Sandbox Code Playgroud)


Aoi*_*asu 4

查看http://www.pinvoke.net/获取签名。这是一个简单的例子。

 const UInt32 INFINITE = 0xFFFFFFFF;

 // Declare variables
 PROCESS_INFORMATION pi;
 STARTUPINFO si;
 System.IntPtr hToken;

 // Create structs
 SECURITY_ATTRIBUTES saThreadAttributes = new SECURITY_ATTRIBUTES();    

 // Now create the process as the user
 if (!CreateProcessAsUser(hToken, String.Empty, commandLine,
 null, saThreadAttributes, false, 0, IntPtr.Zero, 0, si, pi))
 {
 // Throw exception
 throw new Exception("Failed to CreateProcessAsUser");
 }

 WaitForSingleObject(pi.hProcess, (int)INFINITE);
Run Code Online (Sandbox Code Playgroud)