来源: [转载](转)Visual C#中用WMI控制远程计算机 – oraclejava – 博客园
原文:http://dev.yesky.com/msdn/478/2376978.shtml
其实做远程控制软件,WMI是一个很好的选择,尤其是在目前,Windows 2000已经成为了主流的操作系统,利用WMI编写远程控制软件可以省略了已往远程控制软件最头痛的一个环节–分发客户端程序。
版权声明:任何获得天极网授权的网站,转载时请务必保留作者信息和以下链接
天极开发C#专栏:http://dev.yesky.com/msdn/msdnc/
本节中介绍的远程控制程序,能够让使用者重启和关闭远程计算机。其所使用的就是WMI,下面是Visual C#中利用WMI控制远程计算机具体实现步骤。
1. 首先启动Visual Studio .Net,依次选择”文件”、”新建”、”项目”菜单后,在弹出”新建项目”对话框中将”项目类型”设置为”Visual C#项目”,将”模板”设置为”Windows应用程序”,在”名称”文本框中输入”利用WMI控制远程计算机”,在”位置”的文本框中输 入”E:”VS.NET项目”,然后单击”确定”按钮。这样在”E:”VS.NET项目”目录中就创建了一个新的文件夹”利用WMI控制远程计算机”,里 面存放的就是”利用WMI控制远程计算机”的项目文件。
2. 重新执行一下实现【获取远程计算机硬盘信息】项目中的第二至第四步骤。
3. 把Visual Studio .Net当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往窗体中拖入下列组件,并执行相应操作:
三个TextBox组件,用以输入远程计算机名称(或IP地址)、远程计算机WMI操作用户名和口令。
一个ComboBox组件,用以选择对远程计算机执行的操作类型。
四个Label组件。
一个Button组件,名称为button1,拖入窗体后,双击此组件,则系统会在Form1.cs文件中自动产生其Click事件对应的处理代码。
4. 按照表06中的数据调整各组件属性对应的数值:
组件类型 | 组件名称 | 属性 | 设置结果 |
Form | Form1 | Text | 利用WMI控制远程计算机 |
Form1 | FormBorderStyle | FixedSingle | |
Form1 | MaximizeBox | False | |
Label | label1 | Text | 机器名称或IP地址: |
label2 | Text | 具有WMI权限的超级用户名: | |
label3 | Text | 口令: | |
label4 | Text | 选择控制类型: | |
TextBox | textBox1 | Text | “” |
textBox2 | Text | “” | |
textBox3 | PasswordChar | * | |
textBox3 | Text | “” | |
Button | button1 | Text | 执行 |
button1 | FlatStyle | Flat |
表06:【利用WMI控制远程计算机】项目窗体中各组件的主要属性设定数值表
并按照图09中各组件的位置和排列顺序调整窗体中组件的位置和排列顺序:
图09:【利用WMI控制远程计算机】的设计界面 |
private void button1_Click ( object sender , System.EventArgs e ) { //确定WMI操作的范围 ConnectionOptions options = new ConnectionOptions ( ) ; //设定用于WMI连接操作的用户名 options.Username = textBox2.Text ; //设定用户的口令 options.Password = textBox3.Text ; try { ManagementScope Conn = new ManagementScope( “””””” + textBox1.Text + “””root””cimv2”, options ) ; Conn.Connect(); //确定WMI操作的内容 ObjectQuery oq = new ObjectQuery ( “SELECT * FROM Win32_OperatingSystem” ) ; ManagementObjectSearcher query1 = new ManagementObjectSearcher ( Conn , oq ) ; //获取WMI操作内容 ManagementObjectCollection queryCollection1 = query1.Get ( ) ; //根据使用者选择,执行相应的远程操作 foreach ( ManagementObject mo in queryCollection1 ) { string [ ] ss= { “” } ; //执行重启操作 if (comboBox1.Text ==”重新启动”) { mo.InvokeMethod ( “Reboot” , ss ) ; } else //执行远程关机 if ( comboBox1.Text ==”远程关机”) { mo.InvokeMethod ( “Shutdown” , ss ) ; }else MessageBox.Show (“选择不正确的操作!”,”错误!”); } } //报错 catch ( Exception ee ) { MessageBox.Show ( “连接” + textBox1.Text + “出错,出错信息为:” + ee.Message ) ; } } |
图10:【利用WMI控制远程计算机】的运行界面 |
通过以上示例,可见WMI的确是一个非常有用的东西,但由于它还比较新,国内甚至国外还没有完整的介绍资料,因此只是简要的浏览了一下WMI的应用,希望本文的内容能够对大家了解、掌握使用Visual C#调用WMI的方法有所帮助。