在C#中使用WMI

在C#中使用WMI

WMI的功能只适合在微軟的Windows的系統中,它是Windows系統默認情況下開啟的一項服務.它在Windows系統中的功能非常強大.但如果停用了這個服務,那么這种方法就不能正常使用了.
在學習WMI的時候,由于WMI的類太多了,而且結构不是很清楚,所以個人認為一定要熟悉后,使用起來才方便.在C#中使用WMI,必須要添加引用"System.Management.dll",然后手動添加using System.Management;


1.調用WMI中的屬性
一般來說,我們都是通過WQL語句來調用(如例2),但由于C#中提供了丰富的類庫,所以也有其它的一些方式(如例1)
示例1:利用ManagementClass
  /// <summary>
  /// 獲取CPU的序列號
  /// </summary>
  /// <returns></returns>
  public string GetCpuID()
  {
   string info="";
   ManagementClass mc = new ManagementClass("Win32_Processor");
   ManagementObjectCollection moc=mc.GetInstances();
   foreach(ManagementObject mo in moc)
   {
    info = mo.Properties["ProcessorId"].Value.ToString();
   }
   moc=null;
   mc=null;
   return info;

  }
示例2:利用ManagementObjectSearcher
  /// <summary>
  /// 獲取CPU的當前電壓
  /// </summary>
  /// <returns></returns>
  public string GetCpuCurrentVoltage()
  {
   string info ="";
   ManagementObjectSearcher search = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
   foreach (ManagementObject mo in search.Get())
   {
     info =  mo["CurrentVoltage"].ToString();
   }
   return info;
  }

 


2.調用WMI中的方法
示例1:創建共享
 ManagementClass _class = new ManagementClass(new ManagementPath("Win32_Share"));
        object[] obj = {"C://Temp","我的共享",0,10,"Dot Net 实现的共享",""};
        _class.InvokeMethod("create",obj);

示例2:終止一個進程
 ManagementObject service = new ManagementObject("win32_service=/"winmgmt/"");
        InvokeMethodOptions options = new InvokeMethodOptions();
        options.Timeout = new TimeSpan(0,0,0,5); 
        ManagementBaseObject outParams = service.InvokeMethod("StopService", null, options);
        Response.Write("Return Status = " + outParams["Returnvalue"]);

示例3:創建一個進程
     ManagementClass processClass = new ManagementClass("Win32_Process");
     ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
     inParams["CommandLine"] = "calc.exe";
     ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null);
     Response.Write("Creation of calculator process returned: " + outParams["returnvalue"]);
     Response.Write("Process ID: " + outParams["processId"]);

 

3.遠程調用WMI
遠程調用WMI,与本地調用的區別就是:必須提供用戶名和密碼
示例1:
      //连接远程计算机
      ConnectionOptions co = new ConnectionOptions();
      co.Username = "john";
      co.Password = "john";
      System.Management.ManagementScope ms = new System.Management.ManagementScope("192.168.1.4//root//cimv2", co);

      //查询远程计算机
      System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");
      ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
      ManagementObjectCollection queryCollection1 = query1.Get();
     foreach( ManagementObject mo in queryCollection1 )
      {
            Console.WriteLine("Name : " + mo["name"].ToString());
            Console.WriteLine("Version : " + mo["version"].ToString());
            Console.WriteLine("Manufacturer : " + mo["Manufacturer"].ToString());
            Console.WriteLine("Computer Name : " +mo["csname"].ToString());
            Console.WriteLine("Windows Directory : " +mo["WindowsDirectory"].ToString());
     }
示例2:重啟遠程計算机
  //连接远程计算机
        ConnectionOptions co = new ConnectionOptions();
        co.Username = "john";
        co.Password = "john";
        System.Management.ManagementScope ms = new System.Management.ManagementScope("192.168.1.2//root//cimv2", co);      
        //查询远程计算机
        System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");
                  
        ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
        ManagementObjectCollection queryCollection1 = query1.Get();            
        foreach( ManagementObject mo in queryCollection1 ) 
        {
                string[] ss={""};
                mo.InvokeMethod("Reboot",ss);
                Response.Write(mo.ToString());
        }


:以下是一些常用的WMI可以访问的信息类型
   Win32_1394Controller
   Win32_BaseBoard
   Win32_Battery
   Win32_BIOS
   Win32_Bus
   Win32_CacheMemory
   Win32_CDROMDrive
   Win32_CurrentProbe
   Win32_DesktopMonitor
   Win32_DeviceMemoryAddress
   Win32_DiskDrive
   Win32_DisplayConfiguration
   Win32_DisplayControllerConfiguration
   Win32_DMAChannel
   Win32_Fan
   Win32_FloppyController
   Win32_FloppyDrive
   Win32_HeatPipe
   Win32_IDEController
   Win32_InfraredDevice
   Win32_IRQResource
   Win32_Keyboard
   Win32_MemoryArray
   Win32_MemoryDevice
   Win32_MotherboardDevice
   Win32_NetworkAdapter
   Win32_NetworkAdapterConfiguration
   Win32_OnBoardDevice
   Win32_ParallelPort
   Win32_PCMCIAController
   Win32_PhysicalMemory
   Win32_PhysicalMemoryArray
   Win32_PnPEntity
   Win32_PointingDevice
   Win32_PortableBattery
   Win32_PortConnector
   Win32_PortResource
   Win32_POTSModem
   Win32_PowerManagementEvent
   Win32_Printer
   Win32_PrinterConfiguration
   Win32_PrintJob
   Win32_Processor
   Win32_Refrigeration
   Win32_SerialPort
   Win32_SerialPortConfiguration
   Win32_SMBIOSMemory
   Win32_SoundDevice
   Win32_SystemEnclosure
   Win32_SystemMemoryResource
   Win32_SystemSlot
   Win32_TapeDrive
   Win32_TemperatureProbe
   Win32_UninterruptiblePowerSupply
   Win32_USBController
   Win32_VideoConfiguration
   Win32_VideoController
   Win32_VoltageProbe
   CIM_OperatingSystem

參考文獻: 1. http://baike.baidu.com/view/442461.htm
2. http://blog.csdn.net/Actionmr/archive/2008/02/05/2084258.aspx
3. http://www.cnblogs.com/wghao/archive/2008/02/06/685593.html
4. http://www.xmlasp.net/n863c13.aspx
5. http://www.cnblogs.com/doll-net/archive/2007/03/07/667467.aspx
6. http://dev.csdn.net/article/42/42138.shtm
7. http://singlepine.cnblogs.com/articles/299457.html
8. http://www.cnblogs.com/KissKnife/archive/2006/11/25/572281.html
9. http://www.cnblogs.com/KissKnife/archive/2008/01/05/681739.html#1026651
10. http://www.yesadmin.net/5_web/11093/

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值