WMI(Windows管理规范)的一个实现
2006-07-20 11:39:52 来源:WEB开发网核心提示: // 在一个本地或者远程机器上调用Create方法//private void CreateProcess(string stringCommandLine){//设置一个异步回调的句柄ManagementOperationObserver observer = new Managemen
///
/// 在一个本地或者远程机器上调用Create方法
///
///
private void CreateProcess(string stringCommandLine)
{
//设置一个异步回调的句柄
ManagementOperationObserver observer = new ManagementOperationObserver();
completionHandler.MyHandler completionHandlerObj = new completionHandler.MyHandler();
observer.ObjectReady += new ObjectReadyEventHandler(completionHandlerObj.Done);
string stringMachineName = "";
//连接到远程计算机
ConnectionOptions co = new ConnectionOptions();
if (radioMachine.Checked == true)
{
stringMachineName = "localhost";
}
else
{
stringMachineName = textIP.Text;
}
if (stringMachineName.Trim().Length == 0)
{
MessageBox.Show("Must enter machine IP address or name.");
return;
}
//获取用户名与密码
if (textUserID.Text.Trim().Length > 0)
{
co.Username = textUserID.Text;
co.Password = textPassword.Text;
}
//获取指向机器的接入点
System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" +
stringMachineName + "\\root\\cimv2", co);
//获取进程的路径
ManagementPath path = new ManagementPath( "Win32_Process");
//获取将要被调用的进程的对象
ManagementClass processClass = new ManagementClass(ms,path,null);
//更新状态条
updateStatus("Create process " + stringCommandLine + ".");
//为方法准备参数
object[] methodArgs = {stringCommandLine, null, null, 0};
//执行方法
processClass.InvokeMethod (observer, "Create", methodArgs);
//等待,直到invoke调用完成或者超时5秒后
int intCount = 0;
while (!completionHandlerObj.IsComplete)
{
if (intCount > 10)
{
MessageBox.Show("Create process timed out.", "Terminate Process Status");
break;
}
//等待0.5秒
System.Threading.Thread.Sleep(500);
//增加计数器
intCount++;
}
if (intCount != 10)
{
//InvokeMethod尚未超时
//检查是否出现错误
if (completionHandlerObj.ReturnObject.Properties["returnValue"].Value.ToString() == "0")
{
//刷新进程列表
this.Refresh();
}
else
{
MessageBox.Show("Error creating new process.",
"Create New Process");
}
}
//更新状态条
updateStatus("Ready");
this.Update();
}
总结
编写这个演示用的WMI应用程序,增加了我不少的经验。这只展示了WMI很小一部分的功能。我想有了我给出的注释,代码还容易理解吧。
你可以使用WMI完成下列工作:
- 控制硬件与软件
- 监控事件
- 就某个事件运行一个脚本
- 就某个事件发出一封Email
更多精彩
赞助商链接