我正在尝试使用System.Management从远程计算机收集进程信息。
我使用these lines上的内容冒充远程计算机上的管理员,但以下代码抛出异常:“拒绝访问”。
ConnectionOptions options = new ConnectionOptions();
options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
ManagementScope scope = new ManagementScope(@"\\" + machine + @"\root\cimv2", options);
scope.Connect();
ObjectQuery query = new ObjectQuery("Select * from Win32_Process where ProcessId = "
+ procID.ToString());
ManagementObjectSearcher mos = new ManagementObjectSearcher(scope, query);
string cmdLn = "";
foreach (ManagementObject mo in mos.Get())
{
cmdLn = (string)mo.GetPropertyValue("CommandLine");
}
但是,如果我提供options
的用户名和密码,一切正常。
我已经验证此代码是作为模拟上下文(在远程计算机上具有足够的权限)执行的,所以我不确定为什么没有传递用户名/密码它无法正常工作。
是否可以成功进行身份验证而不显式传递用户的凭据?
答案 0 :(得分:0)
使用WMI,在模拟特定用户时,您必须提供显式凭据。您在上面提供的链接使用变量lpszUsername和lpszPassword来说明这一点。