2015-06-29 76 views
0

我已經編寫了C#控制檯應用程序。當我lauch應用程序(不使用cmd)。我可以看到它在任務管理器的進程列表中列出,現在我需要編寫另一個應用程序,在該應用程序中我需要查找以前的應用程序是否正在運行,我知道應用程序名稱和路徑,因此我已經將管理對象搜索器查詢寫入獲取進程的列表,還我使用的路徑,它與它的可執行文件路徑相比,代碼如下查找進程的完整路徑

  var name="test.exe" 
      var path="D:\test" 
      var processCollection = new ManagementObjectSearcher("SELECT * " + "FROM Win32_Process " + "WHERE Name='" + name + "'").Get(); 

      if (processCollection.Count > 0) 
      { 
       foreach(var process in processCollection) 
       { 
        var executablePath=process["ExecutablePath"]; 
        if(executablePath.equals(path)) 
        { 
         return true; 
        } 
       } 
      } 

給出,但可執行文件的路徑始終爲空。

如何獲取其可執行文件路徑?

我不僅可以使用進程名稱,因爲我在我的應用程序中使用了像startserver和stopserver這樣的常用名稱。所以我需要確保它的可執行路徑。

+0

相反,你應該使用進程間通信,以棘手的過程枚舉。例如。使用全局互斥鎖(請參閱[this](http://stackoverflow.com/q/93989/1997232))。 – Sinatr

回答

0

還有一個更簡單的方法,導入System.Diagnostics然後寫下面的代碼,

public bool ProcessIsRun() 
{ 
    Process[] proc = Process.GetProcesses(); 
    Return proc.Any(m => m.ProcessName.Contains("Your process name") && m.Modules[0].FileName == "Your File Path"); 
} 
+0

我想獲得這條路,我可以很容易地通過它的名字獲得過程。 – Mahendran

+0

我已更新我的答案,請檢查 – Behzad

-1

這是你的問題的解決方案:

System.Reflection.Assembly.GetEntryAssembly()

這將返回完整的文件夾路徑可執行當前應用程序。

您可以使用System.Reflection.Assembly.GetEntryAssembly().Location查找具有完整路徑的確切應用程序可執行文件。

+0

你可以說爲什麼它的返回值爲null [「ExecutablePath」]'。我也想在另一個應用程序中找到可執行程序。 – Mahendran

+0

@Mahendran我不知道「ManagementObjectSearcher」的確切功能是什麼 –

+0

這不是對問題的回答。 'GetEntryAssembly()'將返回_current_進程的程序集,而不是OP所明確要求的某個_other_進程。 –