如果叫你實現遠程啟動別人的計算機你首先想到的可能是先做一個在遠程計算機上面運行客戶端程序然後在本地計算機上面再做一個服務器端程序通過這二個程序直接的通訊實現重啟遠程計算機這當然是一個方法但這未免有點麻煩如果現在只告訴你遠程計算機的管理者的登陸帳號而並不允許你在遠程的計算機上面運行一個所謂的客戶端程序讓你通過程序來完成重啟遠程計算機不知道你是否感覺有些困難了其實按照上面的這些條件實現重啟遠程計算機利用C#可以比較方便的完成下面就來介紹一下具體的實現方法
一. C#重啟遠程計算機的一些理論知識
C#實現啟動遠程計算機的原理是視窗管理規范就是所謂的WMI(Windows Management Instrumentation)Windows 管理規范 (WMI) 支持通過 Internet 管理系統的結構通過提供管理環境的一致觀察WMI 為用戶提供通用訪問管理信息該管理的一致性使您能夠管理整個系統而不只是組件從 Microsoft MSDN上您可以獲得有關 WMI 軟件開發工具包 (SDK) 的詳細信息
WMI(Windows 管理規范)支持有限的安全格式允許用戶在本地計算機或遠程計算機上連接 WMI 之前要驗證每個用戶這種安全性是操作系統已有的安全頂端的另一層WMI 不覆蓋或破壞由操作系統提供的任何現有的安全性在默認情況下管理員組的所有成員都可以完全控制它管理的計算機上的 WMI 服務其他所有用戶在其本地計算機上只有讀取/寫入/執行的權限可以通過向被管理的計算機上的管理員組添加用戶或者在 WMI 中授權用戶或組並設置權限級別來更改權限訪問基於 WMI 名稱空間在一般情況下腳本程序的默認命名空間是root\cimv
在WMI中有著許多足以令我們感覺驚奇的功能重啟遠程計算機只是一個很小的功能在程序中使用WMI可以編寫出許多遠程管理類型的應用程序由於在Net FrameWork SDK中提供了可以直接操作WMI的名稱空間所以C#就可以利用在這些名稱空間中定義了的類來充分使用WMI控制給我們帶來的各種方便
二.程序設計和運行的環境設置
()視窗服務器版
() Net FrameWork SDK Beta
()遠程計算機的管理者帳號
以上這些不僅是本地計算機配置還是遠程計算機的配置
三.實現重啟遠程計算機所使用到在Net FrameWork SDK Beta 用以操作WMI名稱空間和類
在Net FrameWork SDK Beta 中用來操作WMI的名稱空間主要是SystemManagement要實現重啟遠程計算機所使用到的類主要有六個
ConnectionOptions類主要定義遠程計算機的管理員帳號
ManagementScope主要是以給定的管理員帳號連接給定計算機名或者IP地址的計算機
ObjectQuery類功能是定義對遠程計算機要實現那些地遠程操作
ManagementObjectSearcher類從已經完成遠程連接的計算機中得到有那些WMI操作
ManagementObjectCollection類存放得到WMI操作
ManagementObject類調用遠程計算機可進行WMI操作
在本文介紹的操作就是重啟操作
四.C#重啟遠程計算機的重要步驟和實現方法
()連接遠程計算機
按照下列語句可以實現連接遠程計算機
ConnectionOptions options = new ConnectionOptions ( ) ;
optionsUsername =管理者帳號用戶名;
optionsPassword = 管理者帳號口令 ;
ManagementScope scope = new ManagementScope( \\\\ + 遠程計算機名或IP地址 + \\root\\cimv options ) ;
//用給定管理者用戶名和口令連接遠程的計算機
scopeConnect ( ) ;
()得到在遠程計算機中可以進行WMI控制
SystemManagementObjectQuery oq = new SystemManagementObjectQuery ( SELECT * FROM Win_OperatingSystem ) ;
ManagementObjectSearcher query = new ManagementObjectSearcher ( scope oq ) ;
//得到WMI控制
ManagementObjectCollection queryCollection = queryGet ( ) ;
()調用WMI控制實現重啟遠程計算機
foreach ( ManagementObject mo in queryCollection )
{
string [ ] ss= { } ;
//重啟遠程計算機
moInvokeMethod ( Reboot ss ) ;
}
五.C#實現重啟遠程計算機的源程序代碼(bootcs)和執行界面
在了解了C#實現重啟遠程計算機的這些重要步驟後就可以從容的得到重啟遠程計算機的完整代碼具體如下
using System ;
using SystemDrawing ;
using SystemCollections ;
using SystemComponentModel ;
using SystemWindowsForms ;
using SystemData ;
using SystemManagement ;
public class Form : Form
{
private TextBox textBox ;
private TextBox textBox ;
private TextBox textBox ;
private Label label ;
private Label label ;
private Label label ;
private Button button ;
private SystemComponentModelContainer components = null ;
public Form ( )
{
//初始化窗體中的各個組件
InitializeComponent ( ) ;
}
//清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
componentsDispose ( ) ;
}
}
baseDispose ( disposing ) ;
}
private void InitializeComponent ( )
{
textBox = new TextBox ( ) ;
textBox = new TextBox ( ) ;
textBox = new TextBox ( ) ;
label = new Label ( ) ;
label = new Label ( ) ;
label = new Label ( ) ;
button = new Button ( ) ;
SuspendLayout ( ) ;
textBoxLocation = new SystemDrawingPoint ( ) ;
textBoxName = textBox ;
textBoxSize = new SystemDrawingSize ( ) ;
textBoxTabIndex = ;
textBoxText = ;
textBoxLocation = new SystemDrawingPoint ( ) ;
textBoxName = textBox ;
textBoxSize = new SystemDrawingSize ( ) ;
textBoxTabIndex = ;
textBoxText = ;
textBoxLocation = new SystemDrawingPoint ( ) ;
textBoxName = textBox ;
textBoxPasswordChar = * ;
textBoxSize = new SystemDrawingSize ( ) ;
textBoxTabIndex = ;
textBoxText = ;
labelLocation = new SystemDrawingPoint ( ) ;
labelName = label ;
labelSize = new SystemDrawingSize ( ) ;
labelTabIndex = ;
labelText = 機器名稱或IP地址 ;
labelLocation = new SystemDrawingPoint ( ) ;
labelName = label ;
labelTabIndex = ;
labelText = 管理者名稱 ;
labelTextAlign = SystemDrawingContentAlignmentTopRight ;
labelLocation = new SystemDrawingPoint ( ) ;
labelName = label ;
labelSize = new SystemDrawingSize ( ) ;
labelTabIndex = ;
labelText = 管理者密碼 ;
labelTextAlign = SystemDrawingContentAlignmentTopRight ;
buttonLocation = new SystemDrawingPoint ( ) ;
buttonName = button ;
buttonSize = new SystemDrawingSize ( ) ;
buttonTabIndex = ;
buttonText = 重新啟動遠程計算機 ;
buttonClick += new SystemEventHandler ( button_Click ) ;
thisAutoScaleBaseSize = new SystemDrawingSize ( ) ;
thisClientSize = new SystemDrawingSize ( ) ;
thisControlsAdd ( button ) ;
thisControlsAdd ( textBox ) ;
thisControlsAdd ( textBox ) ;
thisControlsAdd ( textBox ) ;
thisControlsAdd ( label ) ;
thisControlsAdd ( label ) ;
thisControlsAdd ( label ) ;
thisName = Form ;
thisText = 利用C#重新啟動遠程計算機 ;
thisResumeLayout(false) ;
}
static void Main ( )
{
ApplicationRun ( new Form ( ) ) ;
}
private void button_Click ( object sender SystemEventArgs e )
{
//定義連接遠程計算機的一些選項
ConnectionOptions options = new ConnectionOptions ( ) ;
optionsUsername = textBoxText ;
optionsPassword = textBoxText ;
ManagementScope scope = new ManagementScope( \\\\ + textBoxText + \\root\\cimv options ) ;
try {
//用給定管理者用戶名和口令連接遠程的計算機
scopeConnect ( ) ;
SystemManagementObjectQuery oq = new SystemManagementObjectQuery ( SELECT * FROM Win_OperatingSystem ) ;
ManagementObjectSearcher query = new ManagementObjectSearcher ( scope oq ) ;
//得到WMI控制
ManagementObjectCollection queryCollection = queryGet ( ) ;
foreach ( ManagementObject mo in queryCollection )
{
string [ ] ss= { } ;
//重啟遠程計算機
moInvokeMethod ( Reboot ss ) ;
}
}
//報錯
catch ( Exception ee ) {
MessageBoxShow ( 連接 + textBoxText + 出錯出錯信息為 + eeMessage ) ;
}
}
}
下圖是編譯上面代碼後得到的程序運行界面
.NET編程免費提供,內容來源於互聯網,本文歸原作者所有。