当我使用CreateProcessAsUser在C#中由服务 我的服务需要等待进程退出启动一个进程,但我不知道我能做到这一点退出, 我不想使用检查进程列表中的进程existion等待过程中使用CreateProcessAsUser
5
A
回答
3
退房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);
0
您可以使用GetExitCodeProcess,但请注意,此函数立即返回。
另一种方法是使用WaitForSingleObject。但是这需要用SYNCHRONIZE标志打开进程。例如:
IntPtr hwnd = OpenProcess(SYNCHRONIZE, 0, pid);
if (hwnd != IntPtr.Zero) {
WaitForSingleObject(hwnd, INFINITE);
CloseHandle(hwnd);
}
0
CreateProcessAsUser
回报你的结构PROCESS_INFORMATION
,其中包含hProcess
- 进程句柄。这是WaitForSingleObject
/WaitForMultipleObjects
函数的有效句柄。
7
的PROCESS_INFORMATION返回的句柄新创建的进程(hProcess
),你可以等待这个手柄将成为标志着进程退出的时候。
您可以使用SafeWaitHandle封装句柄,然后使用WaitHandle.WaitOne等待进程退出。
这里是你将如何包装工艺处理
class ProcessWaitHandle : WaitHandle
{
public ProcessWaitHandle(IntPtr processHandle)
{
this.SafeWaitHandle = new SafeWaitHandle(processHandle, false);
}
}
然后将下面的代码可以在手柄签名等
ProcessWaitHandle waitable = new ProcessWaitHandle(pi.hProcess);
waitable.WaitOne();
相关问题
- 1. 如何等待CreateProcessAsUser在C#中完成
- 2. 等待过程
- 3. 等待过程中的Java
- 4. 无法等待过程
- 5. 等待popen3过程完成?
- 6. 等待过程完成
- 7. OpenMutex在使用CreateProcessAsUser打开的过程中失败
- 8. 使用Linux系统调用等待的进程等待
- 9. 线程在C中使用WaitHandles等待#
- 10. 等待()的过程中创造
- 11. 等待()的过程中孩子崩溃
- 12. 等待存储过程中的延迟
- 13. 等待存储过程等待其他存储过程的执行
- 14. 如何使用等待或线程等待事件发生
- 15. 让等待线程跳过剩下的等待/继续
- 16. SQL Server存储过程一直在等待“等待命令”
- 17. 使用UIAlertView中等待
- 18. 使UI线程等待使用的Thread.sleep
- 19. 通过Live SDK使用异步/等待
- 20. 等待进程
- 21. 等待线程
- 22. 异步编程使用异步/等待
- 23. 如何使用处理程序等待?
- 24. 等待过程完成,然后再继续使用Java
- 25. 等待使用信号量时的分叉过程
- 26. CreateProcessAsUser
- 27. 如何使计时器中断等待过程?
- 28. 击:等待在后台巨蟒过程
- 29. python multiprocessing设置产卵过程等待
- 30. jQuery ajax等待php响应过程
我添加了一个如何包装进程句柄的例子。 – 2010-06-05 15:47:23