国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
WMI問題答案集錦
WMI問題答案集錦
作者:網(wǎng)際浪子 文章來源:本站原創(chuàng) 點擊數(shù):1950 更新時間:2004-6-9

WMI使用技巧集
 很多的朋友對WMI可能見過但理解不深,我也是十分想了解關(guān)于WMI的知識,可一直找不對太合適的資料,在網(wǎng)上的一些資料不是有很多錯誤,就是講解不清,我有空的時候?qū)㈥P(guān)于WMI的知識集中一下,放在這里便于大家學(xué)習(xí)。本貼會不斷增加。
1、 什么是WMI
WMI是英文Windows Management Instrumentation的簡寫,它的功能主要是:訪問本地主機的一些信息和服務(wù),可以管理遠程計算機(當(dāng)然你必須要擁有足夠的權(quán)限),比如:重啟,關(guān)機,關(guān)閉進程,創(chuàng)建進程等。
2、 如何用WMI獲得本地磁盤的信息?
首先要在VS.NET中創(chuàng)建一個項目,然后在添加引用中引用一個.net的裝配件:System.Management.dll,這樣你的項目才能使用WMI。代碼如下:
using System;
using System.Management;

 

class Sample_ManagementObject
{
 public static int Main(string[] args) 
 {
  SelectQuery query=new SelectQuery("Select * From Win32_LogicalDisk");
  ManagementObjectSearcher searcher=new ManagementObjectSearcher(query);
  foreach(ManagementBaseObject disk in searcher.Get())
  {
   Console.WriteLine("\r\n"+disk["Name"] +" "+disk["DriveType"] + " " + disk["VolumeName"]);
  }


  Console.ReadLine();

  return 0;

 }

}

disk["DriveType"] 的返回值意義如下:

1 No type 
2 Floppy disk 
3 Hard disk 
4 Removable drive or network drive 
5 CD-ROM 
6 RAM disk


3、如何用WMI獲得指定磁盤的容量?
using System;
using System.Management;

// This example demonstrates reading a property of a ManagementObject.
class Sample_ManagementObject
{
 public static int Main(string[] args) 
 {
  ManagementObject disk = new ManagementObject(
   "win32_logicaldisk.deviceid=\"c:\"");
  disk.Get();
  Console.WriteLine("Logical Disk Size = " + disk["Size"] + " bytes");
  Console.ReadLine(); 
  return 0;
 }
}


4、 如何列出機器中所有的共享資源?
using System;
using System.Management;

class TestApp {
 [STAThread]
 static void Main()
 {
  ManagementObjectSearcher searcher = new ManagementObjectSearcher(
   "SELECT * FROM Win32_share");
  foreach (ManagementObject share in searcher.Get())
  {
   Console.WriteLine(share.GetText(TextFormat.Mof));
  }
 }


}
別忘記在引用中把System.Management添加進來。


5、 怎樣寫程控制讓系統(tǒng)中的某個文件夾共享或取消共享.?
首先,這需要以有相應(yīng)權(quán)限的用戶登錄系統(tǒng)才行。然后,試試下面的代碼:
using System;
using System.Management;

class CreateShare
{
 public static void Main(string[] args)
 {
  ManagementClass _class = new ManagementClass(new ManagementPath("Win32_Share"));

  object[] obj = {"C:\\Temp","我的共享",0,10,"Dot Net 實現(xiàn)的共享",""};

  _class.InvokeMethod("create",obj);
 }
}

object[] obj = {"C:\\Temp","我的共享",0,10,"Dot Net 實現(xiàn)的共享",""};
改為
object[] obj = {"C:\\Temp","我的共享",0,null,"Dot Net 實現(xiàn)的共享",""};
就可以實現(xiàn)授權(quán)給最多用戶了。


6、 如何獲得系統(tǒng)服務(wù)的運行狀態(tài)?
private void getServices()
{
 ManagementObjectCollection queryCollection;
 string[] lvData =  new string[4];
  
 try
 {
  queryCollection = getServiceCollection("SELECT * FROM Win32_Service");
  foreach ( ManagementObject mo in queryCollection)
  {
   //create child node for operating system
   lvData[0] = mo["Name"].ToString();
   lvData[1] = mo["StartMode"].ToString();
   if (mo["Started"].Equals(true))
    lvData[2] = "Started";
   else
    lvData[2] = "Stop";
    lvData[3] = mo["StartName"].ToString();
     
    //create list item
    ListViewItem lvItem = new ListViewItem(lvData,0);
    listViewServices.Items.Add(lvItem);
  }
 }
 catch (Exception e)
 {
  MessageBox.Show("Error: " + e);
 }
}


7、 通過WMI修改IP,而實現(xiàn)不用重新啟動?
using System;
using System.Management;
using System.Threading;

namespace WmiIpChanger
{
 class IpChanger
 {
  [MTAThread]
  static void Main(string[] args)
  {
   ReportIP();
   // SwitchToDHCP();
   SwitchToStatic();
   Thread.Sleep( 5000 );
   ReportIP();
   Console.WriteLine( "end." );
  }

  static void SwitchToDHCP()
  {
   ManagementBaseObject inPar = null;
   ManagementBaseObject outPar = null;
   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc = mc.GetInstances();
   foreach( ManagementObject mo in moc )
   {
    if( ! (bool) mo["IPEnabled"] )
     continue;

    inPar = mo.GetMethodParameters("EnableDHCP");
    outPar = mo.InvokeMethod( "EnableDHCP", inPar, null );
    break;
   }
  }

  static void SwitchToStatic()
  {
   ManagementBaseObject inPar = null;
   ManagementBaseObject outPar = null;
   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc = mc.GetInstances();
   foreach( ManagementObject mo in moc )
   {
    if( ! (bool) mo[ "IPEnabled" ] )
     continue;

    inPar = mo.GetMethodParameters( "EnableStatic" );
    inPar["IPAddress"] = new string[] { "192.168.1.1" };
    inPar["SubnetMask"] = new string[] { "255.255.255.0" };
    outPar = mo.InvokeMethod( "EnableStatic", inPar, null );
    break;
   }
  }

  static void ReportIP()
  {
   Console.WriteLine( "****** Current IP addresses:" );
   ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
   ManagementObjectCollection moc = mc.GetInstances();
   foreach( ManagementObject mo in moc )
   {
    if( ! (bool) mo[ "IPEnabled" ] )
     continue;

    Console.WriteLine( "{0}\n SVC: ‘{1}‘ MAC: [{2}]", (string) mo["Caption"],
     (string) mo["ServiceName"], (string) mo["MACAddress"] );

    string[] addresses = (string[]) mo[ "IPAddress" ];
    string[] subnets = (string[]) mo[ "IPSubnet" ];

    Console.WriteLine( " Addresses :" );
    foreach(string sad in addresses)
     Console.WriteLine( "\t‘{0}‘", sad );

    Console.WriteLine( " Subnets :" );
    foreach(string sub in subnets )
     Console.WriteLine( "\t‘{0}‘", sub );
   }
  }
 }
}


8、 如何利用WMI遠程重啟遠程計算機?
using System;
using System.Management;  
namespace WMI3
{
      /// <summary>
      /// Summary description for Class1.
      /// </summary> 
      class Class1
      {
            static void Main(string[] args)
            {
                  Console.WriteLine("Computer details retrieved using Windows Management Instrumentation (WMI)");
                  Console.WriteLine("mailto:Written%2002/01/02%20By%20John%20O‘Donnell%20-%20csharpconsulting@hotmail.com");
                  Console.WriteLine("========================================
================================="); 
                   //連接遠程計算機
            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);
                        Console.WriteLine(mo.ToString());
                  }
            }
      }
}  


9、 利用WMI創(chuàng)建一個新的進程?
using System;
using System.Management;

// This sample demonstrates invoking a WMI method using parameter objects
public class InvokeMethod 
{    
 public static void Main() 
 {

  //Get the object on which the method will be invoked
  ManagementClass processClass = new ManagementClass("Win32_Process");

  //Get an input parameters object for this method
  ManagementBaseObject inParams = processClass.GetMethodParameters("Create");

  //Fill in input parameter values
  inParams["CommandLine"] = "calc.exe";

  //Execute the method
  ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null);

  //Display results
  //Note: The return code of the method is provided in the "returnvalue" property of the outParams object
  Console.WriteLine("Creation of calculator process returned: " + outParams["returnvalue"]);
  Console.WriteLine("Process ID: " + outParams["processId"]);
 }
}


10、 如何通過WMI終止一個進程?
using System; 
using System.Management; 

// This example demonstrates how to stop a system service. 
class Sample_InvokeMethodOptions 

    public static int Main(string[] args) {
        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);

        Console.WriteLine("Return Status = " + outParams["Returnvalue"]);

        return 0;
    }
}


11、 如何用WMI 來獲取遠程機器的目錄以及文件.比如如何列出一個目錄下的所有文件,或者所有子目錄;如何刪除,舔加,更改文件?
using System;

            using System.Management;

            // This example demonstrates reading a property of a ManagementObject.

            class Sample_ManagementObject

            {

                public static int Main(string[] args) {

                    ManagementObject disk = new ManagementObject(

                        "win32_logicaldisk.deviceid=\"c:\"");

                    disk.Get();

                    Console.WriteLine("Logical Disk Size = " + disk["Size"] + " bytes");

                    return 0;

                }

            }


12、 參考資料
可以參考下列內(nèi)容:

msdn WMI SDK:

http://msdn.microsoft.com/library/default.asp?url=/library/en-  us/wmisdk/wmi/wmi_start_page.asp

WMI使用說明(csdn):

http://www.csdn.net/develop/article/15/15346.shtm

WMI技術(shù)的應(yīng)用 for .net(csdn):

http://www.csdn.net/develop/article/16/16419.shtm

在.NET中輕松獲取系統(tǒng)信息(1) -WMI篇(csdn):

http://www.csdn.net/develop/article/15/15744.shtm


 :)


13、 一些技巧
我使用WMI可以取出網(wǎng)卡的MAC地址,CPU的系列號,主板的系列號,其中主板的系列號已經(jīng)核對過沒有錯的,其余的有待于驗證,因為我使用的是筆記本,筆記本背面有一個主板的系列號,所以可以肯定主板系列號沒有問題

網(wǎng)卡的MAC地址

SELECT MACAddress FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> ‘Microsoft‘))

結(jié)果:08:00:46:63:FF:8C


CPU的系列號

Select ProcessorId From Win32_Processor

結(jié)果:3FEBF9FF00000F24


主板的系列號

Select SerialNumber From Win32_BIOS

結(jié)果:28362630-3700521
獲取硬盤ID
String HDid;
ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
 HDid = (string)mo.Properties["Model"].value;

 MessageBox.Show(HDid  ); 
}


14、 一個使用WMI后的異常處理的問題
下面是我整理的一段代碼.

 
 ManagementObjectCollection queryCollection1;
  ConnectionOptions co = new ConnectionOptions();
  co.Username = "administrator";
  co.Password = "111";
  try
  {
   System.Management.ManagementScope ms = new System.Management.ManagementScope(@"\\csnt3\root\cimv2", co);
   System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");
   ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);

   queryCollection1 = query1.Get();
   foreach( ManagementObject mo in queryCollection1 )
   {
    string[] ss={""};
    mo.InvokeMethod("Reboot",ss);
    Console.WriteLine(mo.ToString());
   }
  }
  catch(Exception ee)
  {

   Console.WriteLine("error");

  }


15、Windows 管理規(guī)范 (WMI) 是可伸縮的系統(tǒng)管理結(jié)構(gòu),它采用一個統(tǒng)一的、基于標準的、可擴展的面向?qū)ο蠼涌凇MI 為您提供與系統(tǒng)管理信息和基礎(chǔ) WMI API 交互的標準方法。WMI 主要由系統(tǒng)管理應(yīng)用程序開發(fā)人員和管理員用來訪問和操作系統(tǒng)管理信息。
WMI 可用于生成組織和管理系統(tǒng)信息的工具,使管理員或系統(tǒng)管理人員能夠更密切地監(jiān)視系統(tǒng)活動。例如,可以使用 WMI 開發(fā)一個應(yīng)用程序,用于在 Web 服務(wù)器崩潰時呼叫管理員。
將 WMI 與 .NET 框架一起使用
WMI 提供了大量的規(guī)范以便為許多高端應(yīng)用程序(例如,Microsoft Exchange、Microsoft SQL Server 和 Microsoft Internet 信息服務(wù) (IIS))實現(xiàn)幾乎任何管理任務(wù)。管理員可以執(zhí)行下列任務(wù): 
• 監(jiān)視應(yīng)用程序的運行狀況。 
• 檢測瓶頸或故障。 
• 管理和配置應(yīng)用程序。 
• 查詢應(yīng)用程序數(shù)據(jù)(使用對象關(guān)系的遍歷和查詢)。 
• 執(zhí)行無縫的本地或遠程管理操作。 
WMI 結(jié)構(gòu)由以下三層組成: 
• 客戶端 
使用 WMI 執(zhí)行操作(例如,讀取管理詳細信息、配置系統(tǒng)和預(yù)訂事件)的軟件組件。 
• 對象管理器 
提供程序與客戶端之間的中間裝置,它提供一些關(guān)鍵服務(wù),如標準事件發(fā)布和預(yù)訂、事件篩選、查詢引擎等。 
• 提供程序 
軟件組件,它們捕獲實時數(shù)據(jù)并將其返回到客戶端應(yīng)用程序,處理來自客戶端的方法調(diào)用并將客戶端鏈接到所管理的基礎(chǔ)結(jié)構(gòu)。 
通過定義完善的架構(gòu)向客戶端和應(yīng)用程序無縫地提供了數(shù)據(jù)和事件以及配置系統(tǒng)的能力。在 .NET 框架中,System.Management 命名空間提供了用于遍歷 WMI 架構(gòu)的公共類。
除了 .NET 框架,還需要在計算機上安裝 WMI 才能使用該命名空間中的管理功能。如果使用的是 Windows Millennium Edition、Windows 2000 或 Windows XP,那么已經(jīng)安裝了 WMI。否則,將需要從 MSDN 下載 WMI。
用 System.Management 訪問管理信息
System.Management 命名空間是 .NET 框架中的 WMI 命名空間。此命名空間包括下列支持 WMI 操作的第一級類對象: 
• ManagementObject 或 ManagementClass:分別為單個管理對象或類。 
• ManagementObjectSearcher:用于根據(jù)指定的查詢或枚舉檢索 ManagementObject 或 ManagementClass 對象的集合。 
• ManagementEventWatcher:用于預(yù)訂來自 WMI 的事件通知。 
• ManagementQuery:用作所有查詢類的基礎(chǔ)。 
System.Management 類的使用編碼范例對 .NET 框架環(huán)境很適合,并且 WMI 在任何適當(dāng)?shù)臅r候均使用標準基框架。例如,WMI 廣泛利用 .NET 集合類并使用推薦的編碼模式,如 .NET 異步操作的“委托”模式。因此,使用 .NET 框架的開發(fā)人員可以使用他們的當(dāng)前技能訪問有關(guān)計算機或應(yīng)用程序的管理信息。
請參見
使用 WMI 管理應(yīng)用程序 | 檢索管理對象的集合 | 查詢管理信息 | 預(yù)訂和使用管理事件 | 執(zhí)行管理對象的方法 | 遠程處理和連接選項 | 使用強類型對象
 
獲取CPU序列號代碼
string cpuInfo = "";//cpu序列號
   ManagementClass cimobject = new ManagementClass("Win32_Processor");
   ManagementObjectCollection moc = cimobject.GetInstances();
   foreach(ManagementObject mo in moc)
   {
    cpuInfo = mo.Properties["ProcessorId"].value.ToString();
    Console.WriteLine(cpuInfo);
    Console.ReadLine();
   }
獲取網(wǎng)卡硬件地址
using System.Management;
...
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
Console.WriteLine("MAC address\t{0}", mo["MacAddress"].ToString());
mo.Dispose();
}
}
獲取硬盤ID
String HDid;
ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
 HDid = (string)mo.Properties["Model"].value;
 MessageBox.Show(HDid  ); 
}


16、在.NET中輕松獲取系統(tǒng)信息(1) -WMI篇
Montaque

申明:
    1、個人的一點心得,僅供參考
    2、轉(zhuǎn)載時候,請保留原本。

概述:
 不知道大家有沒有這種體會?有時候為了獲取系統(tǒng)一點點信息,比如考慮一下操作系統(tǒng)的版本號,或者當(dāng)前屏幕的分辨率。其實說到底就是讀操作系統(tǒng)某個方面的一個屬性值而已,然后就看到我們的程序中密密麻麻的Win32 API申明,調(diào)用,代碼的可讀性和維護性不言而喻。到了.NET,微軟提供了更為豐富的類,有很多以前要調(diào)用API的方法可以在.NET中輕而易舉的調(diào)用實現(xiàn)。今天簡單介紹一個在.NET中如何通過與WMI(Windows 管理規(guī)范)的通訊,從而得到獲取信息的目的。
主要思路:
 舉一個獲取操作系統(tǒng)共享目錄和獲取主板號的例子,介紹如何利用System.Managment下面的類獲取系統(tǒng)相關(guān)的信息:

正文:
 WMI(Windows管理規(guī)范:Windows Management Instrumentation)是Microsoft基于Web的企業(yè)管理(WBEM)的實現(xiàn),同時也是一種基于標準的系統(tǒng)管理接口。WMI最早出現(xiàn)在Microsoft Windows 2000系統(tǒng)上,但它同樣可以安裝在Windows NT 4和Windows 9x計算機上。WMI是一種輕松獲取系統(tǒng)信息的強大工具。
 在.NET中,有一個System.Management名空間(系統(tǒng)默認沒有引用,我們可以手動添加引用),通過下面的Class的操作,可以查詢系統(tǒng)軟硬件的信息,先看一個簡單的例子:

Imports System.Management
Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_share")
Dim share As ManagementObject
 For Each share In searcher.Get()
       MessageBox.Show(share.GetText(TextFormat.Mof))
 Next share
運行的結(jié)果是列出了所有系統(tǒng)當(dāng)前共享的目錄、以及描述等等。

分析一下上面的代碼,可以看到一下幾點:
1、似乎是在進行數(shù)據(jù)庫操作,有點像SQL語句。其實就是SQL操作,這種語句被成WQL(WMI Query Language),實際上是標準SQL的一個子集加上了WMI的擴展.
2、WQL是個只讀的查詢語言,我們只能查詢響應(yīng)的數(shù)據(jù),不能用UPDATE,INSERT等更新操作
3、代碼很簡單、通俗易懂
4、我們采用了一種MOF(托管對象格式)的顯示。

例子二:獲取當(dāng)前主板的信息
 上面的例子是一個軟件方面的信息,下面看一個獲取硬件信息的例子,獲取主板的序列號以及制造商:
Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")
Dim share As ManagementObject
   For Each share In searcher.Get()
      Debug.WriteLine("主板制造商:" & share("Manufacturer"))
      Debug.WriteLine("型號:" & share("Product"))
      Debug.WriteLine("序列號:" & share("SerialNumber"))
   Next share
總結(jié)以及補充:
 WMI類也是分層次的,具體可以參考msdn中的WMI;轉(zhuǎn)向.NET平臺開發(fā)的時候,最好能多看一些關(guān)于.NET新特性的介紹,這樣可以大幅度的提升代碼的開發(fā)效率以及運行效率。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C# 改變Windows中服務(wù)的登錄身份 (賬戶名和密碼)
C# 獲取電腦信息
c#如何獲得cpu,硬盤的物理序列號-程序開發(fā)-紅黑聯(lián)盟
通過WMI獲得硬盤和CPU的物理序列號(VB.net)(WMI access to the...
SQL Server Configuration Manager
C#獲取CPU的序列號、硬盤序列號、網(wǎng)卡序列號等系統(tǒng)相關(guān)信息
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服