WMI 用来监控远程计算机上的硬件和软件。.NET Framework 中的WMI 远程连接通过ManagementScope 对象实现的。
使用System.Management 命名空间来远程连接内部是使用DCOM 来作为统一的远程架构的。WMI远程连接必须服从DCOM身份模拟和认证的安全要求。在不同的操作系统之间,比如,一个从一台Windows 2000 计算机发起,连接到一台Windows Server 2003 计算机的连接的身份模拟和认证可能与两台Windows 2000 计算机之间的不同。
默认情况下,一个范围绑定到本地计算机的root\cimv2 系统命名空间。然而,你可以在确定构造路径的字符串中改变命名空间或者使用一个ManagementPath对象。这个路径使用的字符串按照其他WMI路径的规则,不可以使用反斜线("\")。
当你在进行远程连接时,你可以使用一个特定用户而不是当前的登录用户, 在远程计算机的操作将在特定用户的上下文中执行。这可以通过使用ConnectionOptions 对象实现。
WMI远程连接一台计算机的环境要求:
1. 保证在源端和目的端同时开启Remote Procedure Call(RPC), Remote Procedure Call(RPC) Locator 服务,且设置它们为自动启动。
2. 设置防火墙
如果出现类似于The RPC is Unavaliable 等类似的一系列错误时,要考虑是否是由于防火墙原因导致的。
分别检查源端的OutBound Rules 和 目的端的InBound Rules, 确保Windows Management Instrucmentation(WMI-Out) 已经允许。
3. 可以在源端Ping 通目的端机器
4. 开始->管理工具->计算机管理->连接到另外一台计算机(右键),查看是否可以正常在源端计算机使用WMI连接到目的端计算机。
5. 开始->运行->DCOMCNFG->Component Services->My Computer->右键
->Default Properties->Enable Distributed COM on this computer(Check it)
->Default Protocols->Add Tunneling TCP/IP(Move it until the top one)
全部设置完以后,重启计算机
6. 使用工具WMICodeCreator 来生成需要的代码
7. 示例代码
ConnectionOptions connection = new ConnectionOptions(); //用户名不可以加域名, 要保证用户名和密码正确,否则报RPC is Unavaliable. connection.Username = "testUser"; connection.Password = "testPassword"; //允许权限提升 connection.EnablePrivileges = true; //委托方式身份模拟 connection.Impersonation = ImpersonationLevel.Delegate; //连接到WMI 的认证级别 connection.Authentication = AuthenticationLevel.Call; //不是ntdlmdomain,也不是kerberoes, 否则会提示Invalid Parameter. connection.Authority = "ntlmdomain:MYDOMAIN"; //地址使用IP或者机器全名 ManagementScope scope = new ManagementScope( "\\\\myIPAddress\\root\\CIMV2", connection); scope.Connect(); ManagementClass classInstance = new ManagementClass(scope, new ManagementPath("Win32_Process"), null); ManagementBaseObject inParams = classInstance.GetMethodParameters("Create"); //替换成你的可执行文件路径 inParams["CommandLine"] = "myExecuteFilePath"; ManagementBaseObject outParams = classInstance.InvokeMethod("Create", inParams, null);
来源:https://www.cnblogs.com/danielWise/archive/2011/04/06/2007064.html