访问被拒绝.Net GetProcesses

时间:2016-04-27 22:59:24

标签: c# .net wmi

我无法连接到远程计算机以获取正在运行的进程列表。 对于我的测试机器,我使用的是用户名@“ownme \ veritas”。密码只是“veritas”。 示例域名是“ownme”。

return new System.Management.ConnectionOptions()
{
    //certainly these variables have been checked and are correct
    Username = UserCredential.DomainUser,
    Password = UserCredential.Password
};

这是我尝试连接的地方。我不知道,但这可能是这里的问题。也可能是我没有在上面的ConnectionOptions中填写足够的字段。 我提到了这两篇文章:

https://www.experts-exchange.com/questions/23514935/How-to-use-GetProcess-for-remote-sytems.html

https://msdn.microsoft.com/en-us/library/system.management.connectionoptions.authentication.aspx

我无法弄清楚我做错了什么

ManagementScope scope = new ManagementScope($"\\\\{computer.DnsHostname}\\root\\cimv2", connectionOptions);
scope.Connect();

//Error: Access is denied
var processes = System.Diagnostics.Process.GetProcesses(dnsHostName);

2 个答案:

答案 0 :(得分:0)

GetProcesses将使用当前用户凭据连接到远程计算机,而不是您通过ConnectionOptions指定的凭据。

您需要使用您使用正确凭据创建的WMI范围对象来为这些流程发出查询:

//..

SelectQuery query = new SelectQuery("select * from Win32_Process"); //query processes

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
    using (ManagementObjectCollection collection = searcher.Get())
    {
        foreach (var process in collection) //loop through results
        {
            var name = process["name"]; //process name
            //Do something with process
        }
    }
}

答案 1 :(得分:0)

我没有意识到这是一个如此受欢迎的问题:我很久以前就找到了答案。我实际上没有使用 WMI 来做到这一点。我们实际上向微软提交了一张票,在他们给我们答案后,他们免费给我们打折。答案是:

LogonUser + NEW_CREDENTIALS