WMI不僅可以擷取想要的電腦資料,而且還可以用以遠端控制。遠端控制電腦不僅是駭客們的夢想,也是大多數網路管理者所渴望得到的,尤其在現代的網路中,每一個網路管理者所面對的區域網路,都是由一個龐大的電腦群組成,如果有效管理網路的每一台電腦就顯得格外重要了。目前網路管理軟體通常的做法是,在遠端電腦上運行用戶端背景程式,在本機電腦上運行一個伺服器端前台控製程序,通過這二個程式直接的通訊實現對電腦的遠端控制。這種作法的缺點是十分明顯的,當用戶端關閉了背景程式,這種遠端管理就無法實現了,所以為了克服這個缺點,遠端控制軟體的用戶端程式就做的非常隱蔽,使使用者在不知覺中運行程式。
其實做遠端控制軟體,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中各組件的位置和排列順序調整表單中組件的位置和排列順序:
5. 把Visual Studio .Net的當前視窗切換到Form1.cs檔案的編輯視窗,並用下列代碼替換Form1.cs中的button1的Click事件對應的處理代碼。下列代碼的作用是對根據使用者的選擇對遠端電腦進行進行相應的遠端控制:
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 ) ; } } |
6. 至此,在上述步驟都正確完成,並全部儲存後,【利用WMI控制遠端電腦】下面的全部工作就完成了。此時單擊【F5】快速鍵,就可以運行程式了。在程式的【電腦名稱或IP地址】文字框中輸入要控制的遠端電腦名稱或IP地址,在【具有WMI許可權的使用者名稱】和【口令】文字框中輸入具有WMI操作的帳戶和口令,在【選擇控制類型】組合框中選擇對遠端電腦的控制類型後,單擊【執行】按鈕,則程式就能夠對指定的遠端電腦進行相應的控制了。圖10是【利用WMI控制遠端電腦】的運行介面。
總結:
通過以上樣本,可見WMI的確是一個非常有用的東西,但由於它還比較新,國內甚至國外還沒有完整的介紹資料,因此只是簡要的瀏覽了一下WMI的應用,希望本文的內容能夠對大家瞭解、掌握使用Visual C#調用WMI的方法有所協助。