我在c#中使用CreateProcessAsUser通过我的服务需要等待进程退出的服务来启动进程,但我不知道我该怎么做,我不想使用检查进程列表中的进程existion
该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)
查看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)