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
);
|