2015-06-01 153 views
1

C#進程我寫了跟蹤一套流程,並通知當服務代理奇怪,高內存使用情況運行的監控服務,超過了CPU運行時等在遠程計算機

這是工作的罰款一臺是我的本地計算機,但我需要它指向遠程計算機並獲取這些計算機上的進程信息。

我的做法,在當地工作:

Process.GetProcesses().ToList().ForEach(p => MyProcesses.Add(p)); 

這讓我在我的機器上的進程的集合,有很多更多的邏輯,以它(按名稱等過濾過程),但是這是它歸結爲。

我需要什麼:

Process.GetProcesses(machineName).ToList().ForEach(p => MyProcesses.Add(p)); 

這顯然抱怨訪問,問題是如何傳遞的憑據以某種方式使用此功能?

注意:我具有訪問這些進程所需的所有機器名和證書,但我需要在配置文件中提供此信息。我可以用指定的用戶名運行服務,但仍然抱怨訪問。

+1

爲什麼使用單獨的帳戶而不是爲有權訪問所有計算機的服務創建一個域帳戶?這比存儲用戶名和帳戶更安全 –

+0

在我們的環境中,某些機器有限制,只有某些服務帳戶可以用於訪問這些 –

回答

3

您需要GetProcesses(string)重載接受目標機器的名稱,例如:

Process[] remoteAll = Process.GetProcesses("myComputer"); 

從文檔例子,你會看到GetProcessBy方法也有接受一個目標名稱重載。

在引擎蓋下,Process類使用WMI訪問進程列表等管理信息。

對於高級場景,創建一個WMI查詢可能更好更快,它將返回所需的數據,就像數據庫一樣,而不是枚舉遠程進程並從每個進程中提取數據。

+0

事情是我喜歡Process類簡化事情的方式。但我認爲,我將通過WMI實現這一目標。我會很快研究這個,謝謝 –

+0

@JohanAspeling爲什麼? WMI不會繞過安全限制。如果這些計算機位於同一個域中,則只需將適當的權限授予將運行代碼的帳戶。這也是最安全的方法。你想訪問不在域中的機器,還是需要冒充其他域帳戶? –

+0

機器都在同一個域中,從您的評論我假設我應該給運行該服務的用戶,訪問包含我要監視的進程的計算機。我將在哪裏給這個用戶訪問權限? –