不能使用WMI终止进程但taskkill有效

时间:2013-04-29 17:17:22

标签: c# windows-server-2008 wmi

我的用户位于Administrators组中。我正在使用.NET WMI API(System.Management)使用此代码终止进程:

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#中执行此操作?

2 个答案:

答案 0 :(得分:3)

只有通过pinvoke才能使用的API调用才能实现这一点 - 对于完整的C#源代码,请参阅here

答案 1 :(得分:2)

命令行中的终止进程需要以管理员身份运行,以避免访问被拒绝的错误消息。