2

我的用户在管理员组中。我正在使用 .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"

它未能终止进程并返回2( Access 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# 中执行此操作?

4

1 回答 1

3

这只有通过一些只能通过 pinvoke 获得的 API 调用才可能实现 - 有关完整的 C# 源代码,请参见此处

于 2013-04-29T21:26:42.967 回答