现在的位置: 首页 > 综合 > 正文

WMI设备管理01

2017年12月03日 ⁄ 综合 ⁄ 共 5988字 ⁄ 字号 评论关闭
    
【文章标题】: 设备管理01
【文章作者】: 有酒醉
【作者邮箱】: wuqr32@sina.com
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、前言
WMI是一种管理技术,用于访问您的计算机系统.WMI的最大优点是对象管理器实现了它自己的轮循机制,如果我们想接收通知,如CPU利用率
是否非常高,可用磁盘空间是否下降太快,等等.这些都可以告知对象管理器,它将处理后续的所有事情,并在需要的时产生通知.

二、WMI关键的几个类(参阅MSDN)

ManagementObject 或 ManagementClass:分别为单个管理对象或类。
ManagementObjectSearcher:用于根据指定的查询或枚举检索 ManagementObject 或 ManagementClass 对象的集合。
ManagementEventWatcher:用于预订来自 WMI 的事件通知。
ManagementQuery:用作所有查询类的基础。

三、使用WMI与计算机交互

示例 -- 查询机器处理器信息

// ProcessorInfo.cs
// Author by Yzl

using System;
using System.Management;

public class ProcessorInfo
{
    
public static void Main(string[] args)
    
{
        ManagementClass processorCls 
= new ManagementClass("Win32_Processor");
        
        
// 罗列CPU处理器的信息
        foreach(ManagementObject processorObj in processorCls.GetInstances())
        
{
            Console.WriteLine(
"Processor Id:"+processorObj["ProcessorId"]);
            Console.WriteLine(
"Processor Name:" + processorObj["Name"]);
            Console.WriteLine(
"Current Clock Speed:" + processorObj["CurrentClockSpeed"]);
            
        }

    }

}

 如果要查阅远程计算机的处理器信息,可以做如下更改:
ConnectionOptions connection = new ConnectionOptions();
connection.Username = "user";
connection.Password = "password";

ManagementScope scope = new ManagementScope("////RemoteComputerName//root//CIMV2", connection);
scope.Connect();

ManagementPath p = new ManagementPath("Win32_Processor");
ObjectGetOptions o = new ObjectGetOptions(null, true);
ManagementClass c = new ManagementClass(s, p, o);

查阅其他信息参阅Win32_Processor结构

class  Win32_Processor : CIM_Processor
{
  uint16 AddressWidth;
  uint16 Architecture;
  uint16 Availability;
  
string Caption;
  uint32 ConfigManagerErrorCode;
  boolean ConfigManagerUserConfig;
  uint16 CpuStatus;
  
string CreationClassName;
  uint32 CurrentClockSpeed;
  uint16 CurrentVoltage;
  uint16 DataWidth;
  
string Description;
  
string DeviceID;
  boolean ErrorCleared;
  
string ErrorDescription;
  uint32 ExtClock;
  uint16 Family;
  datetime InstallDate;
  uint32 L2CacheSize;
  uint32 L2CacheSpeed;
  uint32 LastErrorCode;
  uint16 Level;
  uint16 LoadPercentage;
  
string Manufacturer;
  uint32 MaxClockSpeed;
  
string Name;
  
string OtherFamilyDescription;
  
string PNPDeviceID;
  uint16 PowerManagementCapabilities[];
  boolean PowerManagementSupported;
  
string ProcessorId;
  uint16 ProcessorType;
  uint16 Revision;
  
string Role;
  
string SocketDesignation;
  
string Status;
  uint16 StatusInfo;
  
string Stepping;
  
string SystemCreationClassName;
  
string SystemName;
  
string UniqueId;
  uint16 UpgradeMethod;
  
string Version;
  uint32 VoltageCaps;
}
;

示例 -- 查询驱动器信息

// DriverInfo.cs
// Author by Yzl

using System;
using System.Management;

public class DriverInfo
{
    
public static void Main(string[] args)
    
{
        ManagementClass driverCls 
= new ManagementClass("Win32_LogicalDisk");
        
        
// 罗列驱动器的信息
        foreach(ManagementObject driverObj in driverCls.GetInstances())
        
{
            Console.Write(driverObj[
"Description"]+" "+driverObj["DeviceID"]);
            Console.WriteLine();
            
            
if (driverObj["Size"!= null)
            
{
                Console.WriteLine(
"总空间:" + 
                    
double.Parse(driverObj["Size"].ToString())/1024/1024/1024 + "GB");
                Console.WriteLine(
"剩余空间:" +
                    
double.Parse(driverObj["FreeSpace"].ToString())/1024/1024/1024 + "GB");
            }

            Console.WriteLine();
            
        }

    }

}

我的机器下运行结果:

本地固定磁盘 C:
总空间:9.76696395874023GB
剩余空间:0.94287109375GB

本地固定磁盘 D:
总空间:14.6466331481934GB
剩余空间:2.65357208251953GB

本地固定磁盘 E:
总空间:19.5339584350586GB
剩余空间:14.6205635070801GB

本地固定磁盘 F:
总空间:30.5495986938477GB
剩余空间:10.0165901184082GB

CD-ROM 磁盘 G:

E:/>

其他示例我集中一下:

 

// 启动Oralce Linstener服务
// OracleLinstenerStart.cs 
using System;
using System.Management;

public class OracleLinstenerStart
{
    
public  void Main(string[] args)
    
{
        ManagementObject OracleLinstenerObject 
= new ManagementObject(@"rootcimv2",
                
"Win32_Service.Name='OracleoracleTNSListener'",null);
        ManagementBaseObject outObject 
= OracleLinstenerObject.InvokeMethod("StartService",null,null);
        
        
int iRet = int.Parse(outObject["returnValue"].ToString());
        
switch(iRet)
        
{
            
case 0:Console.WriteLine("Oralce Linstener服务正常启动.");break;
            
case 10:Console.WriteLine("Oralce Linstener服务已经启动.");break;
            
default:
                Console.WriteLine(
"其他原因,请参照MSDN");break;
        }

    }

}



// 查找当前正在运行的进程
// ProcessLookup.cs

public class ProcessLookup
{
    
public static void Main(string[] args)
    
{
        ManagementObject xdictObject 
= null;
        
        ManagementClass processClass 
= new ManagementClass("Win32_Process");    
        
foreach(ManagementObject mObject in processClass.GetInstances())
        
{
            
// 罗列当前进程信息
            Console.WriteLine(mObject["Name"]+" "+mObject["ProcessId"]);    
            
if (mObject["Name"].ToString() == "xdict.exe")
            
{
                xdictObject 
= mObject;
            }

        }

        
        
// 关闭金山词霸
        if (xdictObject == null)
        
{
            Console.WriteLine(
"未找到该进程");
            
return;    
        }

        
object o = xdictObject.InvokeMethod("Terminate",new Object[]{0});
        
int iRet = int.Parse(o.ToString());
        
switch(iRet)
        
{
            
case 0:Console.WriteLine("金山词霸正常关闭");break;
            
case 2:Console.WriteLine("访问拒绝");break;
            
case 3:Console.WriteLine("权限不足");break;
            
case 8:Console.WriteLine("未知错误");break;
            
case 9:Console.WriteLine("路径未找到");break;
            
case 21:Console.WriteLine("无效参数");break;
        }
    
                
    }
    
}


// 查看系统的驱动和文件共享
// DocShare.cs

public class DocShare
{
    
public static void Main(string[] args)
    
{
            
    }
    
}

 

<续>
--------------------------------------------------------------------------------
【版权声明】: 本文原创于泉州软件基地, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月11日 15:27:04

 

抱歉!评论已关闭.