我想知道是否有可能從C#中的默認進程獲取相關進程ID。我不想禁用werfault服務,只會得到一個相關(凍結)的進程ID。我寫了這段代碼:如何獲得從默認進程凍結進程ID
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
if (p.ProcessName.ToLower().Contains("werfault"))
{
//getting related process id?
}
}
例如:默認的服務報告'programX已停止工作'。我使用上面的代碼來找到werfault進程,然後殺死它並檢索programX pid(我現在不能這麼做)。
我在這裏找到部分答案:How to launch crashing (rarely) application in subprocess但這適用於python。
這是可能檢索?我需要任何外部庫嗎?
請解釋一下你的答案 – Mazz 2017-04-20 12:14:46
每當一個過程引發了異常,Windows就會啓動werfault.exe,這是「C下找到:\ WINDOWS \ SYSTEM 32 \ WerFault.exe的Windows會自動將PID這個WerFault.exe可以通過使用「GetCommandLine」函數獲得,所以如果你想獲得與WerFault進程相關的凍結應用程序,你首先必須得到CommandLine,它具有已傳遞到該WerFault.exe該命令行包含凍結/崩潰進程的進程ID – Emphosix 2017-04-20 15:08:10
命令行類似於: 「C:\\ Windows \\ SysWOW64 \\ WerFault.exe -u -p 5012 -s 68「 因此在這種情況下,5012將是凍結進程的進程ID。使用此ID,您可以使用Process.GetProcessByID函數來搜索特定的進程 – Emphosix 2017-04-20 15:13:04