2012-08-03 77 views
2

我正在一個c#/ soap/php項目中php web界面將執行一個soap請求來確定控制檯應用程序是否正在運行。正在運行的進程永遠不會被找到

SOAP請求調用獲取過程,然後通過循環來確定進程名稱包含EmailServer的功能。但是,即使我可以在任務管理器中看到進程EmailServer.exe,也永遠無法找到它。我還放了一個斷點,以便查看數組中的哪些進程,並且EmailServer不在那裏。

我運行Windows 7 X64的使用.NET Framework 3.5的,我作爲管理員登錄帳戶,所以它不可能是一個權限問題。

下面是一個屏幕快照,顯示了我的進程在任務管理器enter image description here

運行下面是獲取進程列表

public bool checkIfProcessIsRunning() 
     { 
      Process[] processes = Process.GetProcesses(); 
      foreach (Process process in processes) 
      { 
       if (process.ProcessName.ToLower().Contains("EmailServer")) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
      return false; 
     } 

感謝您的幫助,您可以提供的代碼。

回答

10

process.ProcessName.ToLower()。包含( 「有emailserver」)

你檢查是否已全部小寫字符串包含大寫字符的字符串。

+1

所以,你要'process.ProcessName.ToLower()包含( 「有emailserver」) '或者交替地(如果你想區分大小寫)'process.ProcessName.Contains(「EmailServer」)' – 2012-08-03 18:18:36

+0

5分鐘後,這是我最高的答案。 – Wug 2012-08-03 18:23:38

+0

謝謝你是對的,我也是第二個問題,我在foreach中返回false,所以它會檢查列表中的第一個進程,我認爲我必須有一個糟糕的一天注意。感謝您的幫助 – Boardy 2012-08-03 18:30:15

2

使用這個代替:process.ProcessName.IndexOf("EmailServer", StringComparison.OrdinalIgnoreCase) > -1

您還可以使用

if(Process.GetProcessesByName("EmailServer").Count() > 0) 

或者乾脆

public bool checkIfProcessIsRunning(){ 
    return Process.GetProcessesByName("EmailServer").Any(); 
} 
+1

+1:這可能是正確的做法。 – Wug 2012-08-03 18:26:35

+0

這裏要挑剔,指出你應該在這裏使用屬性而不是方法;你正在返回信息,而不是做手術。此外,只要符合命名約定,「更好」的名稱就是IsProcessRunning或類似的東西。 – aevitas 2012-08-03 19:26:43

相關問題