c# - 无法使用 WMI 终止进程,但 taskkill 可以工作

标签 c# windows-server-2008 wmi

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

相关文章:

C# - 迭代在没有显式 IEnumerable 的情况下工作

tomcat - IIS6 重定向到 tomcat %2B

powershell - 如何仅使用CIM cmdlet(不使用WMI cmdlet)在Powershell中创建VSS卷影副本?

c# - Html Agility Pack - 如何选择正确的跨度类

c# - <form>中的Asp.net core设置后台

tomcat - 我在 Tomcat 上的所有内容都出现连接超时,日志显示都是 404。我该如何调试它?

iis-7 - 通过 AppPool 回收持久化静态数据

c# - WMI 获取所有监视器不返回所有监视器

c++ - 从变体 VT_UNKNOWN 读取并显示数据

c# - 关闭或处置读卡器时一切都会卡住