2012-10-30 61 views
1

我一直有過程中的問題,我從來沒有能夠檢查過程是否由於某種原因運行,我已經嘗試了我可以通過谷歌找到的每個代碼片段,但沒有任何東西已經工作了。我也嘗試過不同的文件。所以最後我會請求幫助:)這裏是在許多片段已無法檢測甚至NOTEPAD.EXE:正在進程運行,從來沒有工作

public bool IsProcessOpen(string name) { 
    foreach (Process clsProcess in Process.GetProcesses()){ 
     if (clsProcess.ProcessName.Contains(name)){ 
      return true; 
     } 
    } 
    return false; 
} 

我知道如何明顯調用該方法,但所有的人喜歡它的任何返回false文件多數民衆贊成在運行或不。這是一種錯誤嗎?

+2

你試過枚舉進程列表,看看有什麼回來了,他們的名字是? – Charleh

+0

你的代碼是好的,你測試了什麼'name'?您運行下面的代碼的帳戶是否有足夠的權限來列出流程? –

回答

3

您不會找到notepad.exe,因爲它的ProcessName只是notepad

enter image description here

你可以通過修剪擴展:

Path.GetFileNameWithoutExtension(name) 

你也可以你的方法體減少至一個行:

return Process.GetProcessesByName(Path.GetFileNameWithoutExtension(name)).Length > 0; 
1

你的方法是好的。也許你遇到大小寫問題?您可以改善映射您的支票大寫if語句:

clsProcess.ProcessName.ToUpperInvariant().Contains(name.ToUpperInvariant()) 

然後notepadNotepadNOTEPAD都將匹配名爲notepad過程。

+0

啊哈,它似乎你最「或所有」是正確的..我正在尋找notepad.exe/file.exe時,事實上,我應該已經刪除了分機*嘆* – ace007

1

這一直爲我工作

if(Process.GetProcessesByName("notepad").Length == 0) 
{ 
    // do stuff 
} 
0

這將檢查進程是否正在運行並更改按鈕的顏色。 請確保你的名字是正確的:一些取點EXE,一些沒有。這是檢查系統過程'。

Process[] proc = Process.GetProcessesByName("iexplore"); 
     if (proc.Length == 0) 
     { 
      btnlogon.BackColor = Color.OrangeRed; 
     } 
     else 
     { 
      btnlogon.BackColor = Color.LightGreen; 
     } 
相關問題