熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#重啟遠程計算機的代碼

2013-11-13 10:24:54  來源: .NET編程 

  如果叫你實現遠程啟動別人的計算機你首先想到的可能是先做一個在遠程計算機上面運行客戶端程序然後在本地計算機上面再做一個服務器端程序通過這二個程序直接的通訊實現重啟遠程計算機這當然是一個方法但這未免有點麻煩如果現在只告訴你遠程計算機的管理者的登陸帳號而並不允許你在遠程的計算機上面運行一個所謂的客戶端程序讓你通過程序來完成重啟遠程計算機不知道你是否感覺有些困難了其實按照上面的這些條件實現重啟遠程計算機利用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控制給我們帶來的各種方便
    二.程序設計和運行的環境設置
      (windows Professional
      ( Net FrameWork SDK
      (遠程計算機的管理者帳號
      以上這些不僅是本地計算機配置還是遠程計算機的配置
    三.實現重啟遠程計算機所使用到在Net FrameWork SDK用以操作WMI名稱空間和類
      添加引用SystemManagement;
      在Net FrameWork SDK中用來操作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;
    namespace ReStartboot
    {
    /// <summary>
    /// Form 的摘要說明
    /// </summary>
    public class Form : SystemWindowsFormsForm
    {
    private SystemDrawingPrintingPrintDocument printDocument;
    private SystemWindowsFormsLabel label;
    private SystemWindowsFormsLabel label;
    private SystemWindowsFormsLabel label;
    private SystemWindowsFormsTextBox textBox;
    private SystemWindowsFormsTextBox textBox;
    private SystemWindowsFormsTextBox textBox;
    private SystemWindowsFormsButton button;
    /// <summary>
    /// 必需的設計器變量
    /// </summary>
    private SystemComponentModelContainer components = null;
    public Form()
    {
    //
    // Windows 窗體設計器支持所必需的
    //
    InitializeComponent();
    //
    // TODO: 在 InitializeComponent 調用後添加任何構造函數代碼
    //
    }
    /// <summary>
    /// 清理所有正在使用的資源
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null)
    {
    componentsDispose();
    }
    }
    baseDispose( disposing );
    }
    #region Windows Form Designer generated code
    /// <summary>
    /// 設計器支持所需的方法 不要使用代碼編輯器修改
    /// 此方法的內容
    /// </summary>
    private void InitializeComponent()
    {
    thisprintDocument = new SystemDrawingPrintingPrintDocument();
    thislabel = new SystemWindowsFormsLabel();
    thislabel = new SystemWindowsFormsLabel();
    thislabel = new SystemWindowsFormsLabel();
    thistextBox = new SystemWindowsFormsTextBox();
    thistextBox = new SystemWindowsFormsTextBox();
    thistextBox = new SystemWindowsFormsTextBox();
    thisbutton = new SystemWindowsFormsButton();
    thisSuspendLayout();
    //
    // label
    //
    thislabelLocation = new SystemDrawingPoint( );
    thislabelName = label;
    thislabelSize = new SystemDrawingSize( );
    thislabelTabIndex = ;
    thislabelText = 遠程計算機名或IP;
    thislabelTextAlign = SystemDrawingContentAlignmentMiddleRight;
    //
    // label
    //
    thislabelAnchor = SystemWindowsFormsAnchorStylesTop;
    thislabelLocation = new SystemDrawingPoint( );
    thislabelName = label;
    thislabelTabIndex = ;
    thislabelText = 管理員名;
    thislabelTextAlign = SystemDrawingContentAlignmentMiddleRight;
    //
    // label
    //
    thislabelLocation = new SystemDrawingPoint( );
    thislabelName = label;
    thislabelTabIndex = ;
    thislabelText = 密碼;
    thislabelTextAlign = SystemDrawingContentAlignmentMiddleRight;
    //
    // textBox
    //
    thistextBoxLocation = new SystemDrawingPoint( );
    thistextBoxName = textBox;
    thistextBoxSize = new SystemDrawingSize( );
    thistextBoxTabIndex = ;
    thistextBoxText = ;
    //
    // textBox
    //
    thistextBoxLocation = new SystemDrawingPoint( );
    thistextBoxName = textBox;
    thistextBoxSize = new SystemDrawingSize( );
    thistextBoxTabIndex = ;
    thistextBoxText = ;
    //
    // textBox
    //
    thistextBoxLocation = new SystemDrawingPoint( );
    thistextBoxName = textBox;
    thistextBoxSize = new SystemDrawingSize( );
    thistextBoxTabIndex = ;
    thistextBoxText = ;
    //
    // button
    //
    thisbuttonLocation = new SystemDrawingPoint( );
    thisbuttonName = button;
    thisbuttonSize = new SystemDrawingSize( );
    thisbuttonTabIndex = ;
    thisbuttonText = 重啟遠程計算機;
    thisbuttonClick += new SystemEventHandler(thisbutton_Click);
    //
    // Form
    //
    thisAutoScaleBaseSize = new SystemDrawingSize( );
    thisClientSize = new SystemDrawingSize( );
    thisControlsAddRange(new SystemWindowsFormsControl[] { thislabel});
    thisName = Form;
    thisText = 重啟遠程計算機;
    thisResumeLayout(false);
    }
    #endregion
    /// <summary>
    /// 應用程序的主入口點
    /// </summary>
    [STAThread]
    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\\cimvoptions);
    try
    {
    //用給定管理者用戶名和口令連接遠程的計算機
    scopeConnect();
    ObjectQuery oq=new ObjectQuery(select * from win_OperatingSystem);
    ManagementObjectSearcher query=new ManagementObjectSearcher(scopeoq);
    ManagementObjectCollection queryCollection=queryGet();
    foreach(ManagementObject mo in queryCollection)
    {
    string[] ss={};
    moInvokeMethod(Rebootss);
    }
    }
    catch(Exception er)
    {
    MessageBoxShow(連接 + textBoxText + 出錯出錯信息為 +erMessage);
    }
    }
    }
    }


From:http://tw.wingwit.com/Article/program/net/201311/13542.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.