我想在本地网络上使用ManagementScope从另一台PC连接到运行Windows 7的远程PC.在远程PC上,我创建了一个没有密码的新用户帐户"Samuel"并设置为管理员.
ConnectionOptions options = new ConnectionOptions();
options.Username = "Samuel";
options.Password = "";
ManagementScope scope = new ManagementScope("\\\\192.168.0.2\\root\\cimv2", options);
scope.Connect();
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))
更新:
设置密码后,我收到新错误:
RPC服务器不可用.(HRESULT异常:0x800706BA)
也许它是缺少的'EnablePrivileges':
scope.Options.EnablePrivileges = true;
Run Code Online (Sandbox Code Playgroud)
从MSDN(ConnectionOptions.EnablePrivileges属性):
获取或设置一个值,该值指示是否需要为连接操作启用用户权限.仅当执行的操作需要启用某个用户权限(例如,计算机重新启动)时,才应使用此属性.
编辑:如果它不起作用,请尝试将ImpersonationLevel设置为'Impersonate':
scope.Options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
Run Code Online (Sandbox Code Playgroud)
ImpersonationLevel冒充:冒充级COM模拟级别,允许对象使用调用方的凭据.这是WMI调用的推荐模拟级别.
根据TechNet 上的WMI FAQ,0x80070005错误表示DCOM问题:
0x80070005(DCOM ACCESS_DENIED)
当无法识别连接用户或远程服务器以某种方式限制连接用户时(例如,用户可能被锁定),会发生此错误.当帐户位于不同的域中时,这种情况最常发生.最近对WMI安全性的更改也可能导致发生此错误:
Windows XP和Windows Server 2003中不允许使用以前允许的空白密码.
WMI不允许对Windows 98客户端进行异步回调.从Windows 98计算机到Windows XP计算机的类似SWbemServices.ExecNotificationQueryAsync的调用将导致返回到Windows 98计算机的"拒绝访问"错误.
DCOM配置访问设置可能已更改.
如果目标计算机正在运行Windows XP,则可能会将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa下的Forceguest值设置为强制关闭Guest帐户(值为零).
(虽然提到了Windows XP,但它也可能适用于Windows 7.)
其中的0x800706BA错误表示防火墙问题:
0x800706xx(DCOM RPC错误)
当在远程计算机上配置防火墙时,通常会发生这种情况.您需要在防火墙上打开相应的端口以允许使用DCOM进行远程管理.
尝试在远程计算机上的Windows防火墙中启用远程管理例外,看看它是否有帮助.要从命令行执行此操作,请在提升的命令提示符中运行以下命令:
netsh advfirewall firewall set rule group="remote admin" new enable=yes
Run Code Online (Sandbox Code Playgroud)
您还可以在MSDN上的" 连接到WMI远程启动Windows Vista"文章中找到远程WMI访问所需的DCOM,UAC,Windows防火墙和其他设置.
此外,由于萨穆埃尔是一个非域帐户,则需要此帐户授予DCOM 远程访问,远程启动和远程激活所描述的权限在远程计算机上这里.
你得到"访问被拒绝".因为您无法仅使用用户名查询范围连接.您有2个选项:用户名和密码为null或输入用户名和密码.
你得到"RPC服务器不可用".因为防火墙不允许您查询该计算机.您有2个选项:禁用防火墙或向其添加远程管理例外.
您可以在cmd:旧版Windows中添加这样的防火墙例外:
netsh firewall set service type = remoteadmin mode = enable
较新的Windows版本:
netsh advfirewall防火墙设置规则组="Windows远程管理"新的启用=是
如果您尝试使用域用户登录,domainName\username请将用户名更改为或设置连接属性connection.Authority = "ntlmdomain:domainName".