2016-09-01 54 views
-1

我試圖監視任何進程的創建和終止,而無需管理員權限的! 我發現很多貼例子像這樣的:監控進程的創建和終止

// query every 2 seconds 
string pol = "2"; 

WqlEventQuery queryString = new WqlEventQuery(
    "SELECT *" + 
    " FROM __InstanceOperationEvent " + 
    "WITHIN " + pol + 
    " WHERE TargetInstance ISA 'Win32_Process' "); 

// You could replace the dot by a machine name to watch to that machine 
ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2"); 

// create the watcher and start to listen 
watcher = new ManagementEventWatcher(scope, queryString); 
watcher.EventArrived += OnEventArrived; 
watcher.Start(); 

如果我只收到我可以確定某個進程啓動或停止的事件,但如果我嘗試消耗OnEventArrivede.NewEvent.Property["ProcessName"].Value我在遇到麻煩訪問權限。

我的問題是現在: 爲什麼我能收到一般的創建和終止的信息,但如果我想獲得細節出了大事我成爲制約?

我可以使用Process.GetProcesses()和比較前面任何價值,我得到我自己的信息,這樣我就可以無論如何得到這個信息。這似乎並不像我應該需要訪問權限。

+0

Powershell腳本將是相當多的選項,而不是C#用於監控進程... – JDavila

+0

@JDavila是的,如果您沒有客戶希望在應用程序中看到他想要監控的所有進程的綠色小標誌; ) – GreenEyedAndy

回答

0

訪問某些過程,必須有特定進程創建管理員權限,或可以訪問在關注過程中的組內所存在的管理員帳戶。

「無法單獨通過進程名稱訪問進程資源,但是,一旦檢索到與進程資源相關聯的進程組件的數組,您就可以啓動,終止或以其他方式處理系統資源。」

來自:https://msdn.microsoft.com/en-us/library/z3w4xdc9(v=vs.110).aspx

本質上,的處理的陣列必須被在C#陣列訪問和修改的過程創建。

過程的細節很可能需要更高的訪問級別或權限。到對象的訪問是基於不同的水平,如信息,錯誤,等。通常,使用Windows身份驗證時,用戶的任何其它類型的修飾可發生之前需要訪問權到該對象。

+0

謝謝你的快速的答案,但你知道,甚至有可能得到任何正在運行的進程的命令行參數,所以我不知道爲什麼會出現得到通知,如沒有簡單的方法notepad.exe是在沒有管理員權限的情況下啓動的,或者爲我想要監視的每個文件名設置Watcher。 – GreenEyedAndy