程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Visual C#中用WMI獲取遠程計算機信息

Visual C#中用WMI獲取遠程計算機信息

編輯:關於C語言
如果不使用WMI,想要獲取遠程計算機的系統數據,最常用的方法就是在遠程計算機上運行一個客戶端程序,本地機通過和這個客戶端程序來獲取遠程計算機的系統數據。這種實現方法無論是程序設計還是後面的程序分發都是及其困難的。而使用WMI,一切就顯得非常簡單。下面介紹的這個示例,其功能是利用WMI獲取遠程計算機硬盤數據。各位只需對這個程序稍加修改,就可以獲得遠程計算機的其他數據。下面是具體的實現步驟:

  版權聲明:任何獲得天極網授權的網站,轉載時請務必保留作者信息和以下鏈接
  天極開發ASP.Net專欄:http://dev.yesky.com/msdn/msdnc

  1. 首先啟動Visual Studio .Net,依次選擇"文件"、"新建"、"項目"菜單後,在彈出"新建項目"對話框中將"項目類型"設置為"Visual C#項目",將"模板"設置為"Windows應用程序",在"名稱"文本框中輸入"獲得遠程計算機硬盤信息",在"位置"的文本框中輸入"E:\VS.NET項目",然後單擊"確定"按鈕。這樣在"E:\VS.Net項目"目錄中就創建了一個新的文件夾"獲得遠程計算機硬盤信息",裡面存放的就是"獲得遠程計算機硬盤信息"的項目文件。

  2. 由於Visual Studio .Net缺省的編譯環境中並沒有包括命名空間"System.Management"所位於的文件"System.Management.dll",所以首先要在項目文件中引入此DLL文件。具體的步驟如下:

  選中【解決方案資源管理器】中的【引用】,單擊鼠標右鍵,在彈出的菜單中,選擇【添加引用】,具體如圖05所示:


圖05:添加引用

  在彈出【添加引用】對話框中,選擇【.Net】頁面,在【組件名稱】欄中選擇【System.Managemen】後,單擊【選擇】按鈕,此時在【選定的組件】欄中就加入了【System.Managemen】,然後單擊【確定】按鈕,則在Visual Studio .Net集成開發環境中就引入命名空間"System.Managemen"。具體如圖06所示:


圖06:添加引用

  3. 在【解決方案資源管理器】窗口中,雙擊Form1.cs文件,進入Form1.cs文件的編輯界面。

  4. 在Form1.cs文件的開頭,用下列導入命名空間代碼替代系統缺省的導入命名空間代碼。

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Management ;
//WMI操作類位於的命名空間
  5. 把Visual Studio .Net當前窗口切換到【Form1.cs(設計)】窗口,並從【工具箱】中的【Windows窗體組件】中往窗體中拖入下列組件,並執行相應操作:

  三個TextBox組件,分別輸入遠程計算機名稱或IP地址,遠程計算機的超級用戶帳戶和口令。

  一個ListBox組件,用以顯示遠程計算機硬盤信息。

  三個Label組件。

  一個Button組件,名稱為button1,拖入窗體後,雙擊此組件,則系統會在Form1.cs中自動產生其Click事件對應的處理代碼。

  6. 按照表05中的數據調整各組件屬性對應的數值:

組件類型 組件名稱 屬性 設置結果 Form Form1 Text 獲取遠程計算機硬盤信息 Form1 FormBorderStyle FixedSingle Form1 MaximizeBox False Label label1 Text 遠程計算機名或IP地址: label2 Text 擁有WMI權限的用戶名: label3 Text 口令: TextBox textBox1 Text "" textBox2 Text "" textBox3 PassWordChar * textBox3 Text "" Button button1 Text 獲得硬盤信息   button1 FlatStyle Flat      表05:【獲得遠程計算機硬盤信息】項目窗體中各組件的主要屬性設定數值表

  並按照圖07中各組件的位置和排列順序調整窗體中組件的位置和排列順序:


圖07:【獲得遠程計算機硬盤信息】項目的設計界面

  7. 把Visual Studio .Net的當前窗口切換到Form1.cs文件的編輯窗口,並用下列代碼替換Form1.cs中的button1的Click事件對應的處理代碼。下列代碼的作用是對遠程計算機進行WMI查詢,提起查詢得到數據,並顯示結果:

private void button1_Click ( object sender , System.EventArgs e )
{
 long mb = 1048576 ;
 //1024x1024
 //設定生成的WMI所需的所有設置
 System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ;
 //設定用於WMI連接操作的用戶名
 Conn.Username = textBox2.Text ;
 //設定用戶的口令
 Conn.PassWord = textBox3.Text ;
 //設定用於執行WMI操作的范圍
 System.Management.ManagementScope Ms = new ManagementScope ( "\\\\" + textBox1.Text + "\\root\\cimv2" , Conn ) ;
 try
 {
  //連接到實際操作的WMI范圍
  Ms.Connect ( ) ;
  //設定通過WMI要查詢的內容
  ObjectQuery Query = new ObjectQuery ( "select FreeSpace ,Size ,Name from Win32_LogicalDisk where DriveType=3" ) ;
  //WQL語句,設定的WMI查詢內容和WMI的操作范圍,檢索WMI對象集合
  ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( Ms , Query ) ;
  //異步調用WMI查詢
  ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
  double free = 0 ;
  double use = 0 ;
  double total = 0 ;
  listBox1.Items.Clear ( ) ;
  //通過對產生的WMI的實例集合進行檢索,獲得硬盤信息
  foreach ( ManagementObject Return in ReturnCollection )
  {
   listBox1.Items.Add ( "磁盤名稱:" + Return["Name"].ToString ( ) ) ;
   //獲得硬盤的可用空間
   free = Convert.ToInt64 ( Return["FreeSpace"] ) /mb ;
   //獲得硬盤的已用空間
   use = ( Convert.ToInt64 ( Return["Size"] ) - Convert.ToInt64 ( Return["FreeSpace"] ) ) /mb ;
   //獲得硬盤的合計空間
   total = Convert.ToInt64 ( Return["Size"] ) /mb ;
   listBox1.Items.Add ( " 總計:"+ total.ToString ( ) + "MB" ) ;
   listBox1.Items.Add ( "已用空間:"+ use.ToString ( ) + "MB" ) ;
   listBox1.Items.Add ( "可用空間:"+ free.ToString ( ) + "MB" ) ;
  }
 }
 catch ( Exception ee )
 {
  MessageBox.Show ( "連接" + textBox1.Text + "出錯,出錯信息為:" + ee.Message ,"出現錯誤!" ) ;
 }
}

  8. 至此,在上述步驟都正確完成後,【獲取遠程計算機硬盤信息】項目的全部工作也就完成了。此時單擊快捷鍵F5運行程序。在正確輸入遠程計算機的IP地址或用戶名,遠程計算機超級用戶名和口令後,單擊【獲取硬盤信息】按鈕,則程序會獲取的指定計算機的硬盤的數據並顯示出來,具體如圖08所示:


圖08:【獲得遠程計算機硬盤信息】的運行界面

  怎麼樣,是否有一種做黑客的感覺。下面將介紹使用WMI完成一項更"酷"的程序。通過此程序將重啟或關閉遠程計算機。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved