2013-04-29 50 views
1

我的用戶位於管理員組中。我使用的.NET WMI API(System.Management)使用此代碼來殺死一個進程:無法終止使用WMI的進程,但taskkill可以運行

var scope = new ManagementScope("\root\cimv2"); 
scope.Connect(); 
var query = new ObjectQuery(
    string.Format("Select * from Win32_Process Where ProcessID = {0}", 
     processId)); 
var searcher = new ManagementObjectSearcher(scope, query); 
var coll = searcher.Get().GetEnumerator(); 
coll.MoveNext(); 
var mgmtObj = (ManagementObject)coll.Current; 
var ret = (uint) mgmtObj.InvokeMethod("Terminate"); 
// ret == 2 here, meaning "Access Denied" 

它無法殺死進程,並返回一個2Access Denied)。但是,如果我使用:

Process.Start("cmd", string.Format("/c \"taskkill /f /pid {0}\"", processId)); 

該進程死亡。 (但如果我忽略/f它失敗)。

有什麼辦法可以用WMI來終止進程嗎?

編輯:我發現 http://msdn.microsoft.com/en-us/library/windows/desktop/aa393907(v=vs.85).aspx如下:

要終止,你不擁有,使 SeDebugPrivilege特權的過程。

該頁面提供了VBScript代碼,但是如何在C#中執行此操作?

回答

3

這僅適用於一些僅通過pinvoke提供的API調用 - 完整的C#源代碼請參閱here

+0

它的工作!謝謝! – JoelFan 2013-04-30 21:48:11