在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/