我的用户位于管理员组中。我正在使用 .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
(拒绝访问
)。但是如果我使用:
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 :
To terminate a process that you do not own, enable the SeDebugPrivilege privilege.
该页面提供了 VBScript 代码,但我如何在 C# 中执行此操作?
最佳答案
这仅适用于某些只能通过 pinvoke 进行的 API 调用 - 有关完整的 C# 源代码,请参阅 here .
关于c# - 无法使用 WMI 终止进程,但 taskkill 可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284511/