試圖實現窮人對進程是否仍在運行的測試(基本上等同於簡單的kill(pid, 0)
。)WINSDK:確定任意pid是否標識Windows上正在運行的進程
希望能夠簡單地調用OpenProcess
並獲得一些最小的所需訪問權限,然後測試GetLastError() == ERROR_INVALID_PARAMETER
或GetExitCodeProcess(...) != STILL_ACTIVE
。
很好的嘗試...在Windows XP上運行,作爲管理員:
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
if (!hProc) {
DWORD dwLastError = GetLastError();
}
...當pid
由不同的(非SYSTEM)用戶擁有時,與dwLastError == ERROR_ACCESS_DENIED
失敗。此外,如果pid
是最初由不同的用戶擁有但後來終止,OpenProcess
也失敗了ERROR_ACCESS_DENIED
(而不是ERROR_INVALID_PARAMETER
。)
我是否必須使用Process32First
/Process32Next
或EnumProcesses
?
我絕對不想使用SeDebugPrivilege
。
謝謝, V
另請參閱http://stackoverflow.com/questions/1591342/how-to-determine-if-a-wi ndows-process-is-running可能有其他更可靠的方法 – rogerdpack 2012-09-28 00:17:51
@rogerdpack在這種情況下唯一可用的信息是'pid'。沒有手柄可用。我知道關於http://stackoverflow.com/questions/1591342/how-to-determine-if-a-windows-process-is-running,我甚至在那裏提出了一條評論。 :) – vladr 2012-10-09 18:44:52
是的,更多我正在發表評論以提醒用戶我已經添加了一個可能適用於此問題的答案,但也不希望將其添加到這兩個地方。乾杯! – rogerdpack 2012-10-10 21:29:15