2024年9月managementobjectsearcher的指令集(ManagementObjectSearcher是什么意思求解)

 更新时间:2024-09-21 08:49:33

  ⑴managementobjectsearcher的指令集(ManagementObjectSearcher是什么意思求解

  ⑵ManagementObjectSearcher是什么意思求解

  ⑶ManagementObjectSearcher主要是根据指定的查询检索WMI对象的集合。ManagementObjectSearcher组成成员也非常简单,其方法Get方法是非常重要的,ManagementObjectSearcher通过Get方法进行WMI查询,并把得到的结果集合。Get方法的返回值是一个ManagementObjectCollection实例,它包含匹配指定查询的对象。

  ⑷c#中的ManagementObject索引器问题

  ⑸在VS中将鼠标放在代码上就会显示的啦!看代码应该显示索引名MACAddress的值。按字面解释MACAddress是网卡Mac地址,估计返回应该是一个字符串

  ⑹在C#中如何获取系统中所安装的所有软件信息

  ⑺在编写我们自己的脚本之前,我们需要对WMI的体系结构有个基本的了解。如图一:(.gif)在WMI体系结构中我们最需要关心的就是WMI提供程序,WMI提供程序在WMI和托管资源之间扮演着中间方的角色。提供程序代表使用者应用程序和脚本从WMI托管资源请求信息,并发送指令到WMI托管资源。下面是我们利用WMI编程经常要用到的WMI内置提供程序清单,以供编程参考。.ActiveDirectory提供程序链接库文件:dsprov.dll命名空间:rootdirectoryldap作用:将ActiveDirectory对象映射到WMI。.事件日志提供程序链接库文件:ntevt.dll命名空间:rootcimv作用:管理Windows事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。.注册表提供程序链接库文件:stdprov.dll命名空间:rootdefault作用:读取、写入、枚举、监视、创建、删除注册表项和值。.Win提供程序链接库文件:cimwin.dll命名空间:rootcimv作用:提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM用户及组,以及更多资源的信息。.Windows安装程序提供程序链接库文件:msiprov.dll命名空间:rootcimv作用:提供对已安装软件信息的访问。从上面可以看出在WMI中类(即内置提供程序被分组到命名空间中,命名空间可以看成是一个组。比如,命名空间rootcimv包括大部分表示通常与计算机和操作系统相关联的资源的类。在使用类的时候要说明类所在的命名空间。类由属性和方法构成。这是可视化编程中的两个重要的概念。属性描述的是对象的状态,方法是对象可以执行的操作。

  ⑻C#怎样得到打印机驱动的ip或端口号解决办法

  ⑼解决方案一使用WMI获取打印机信息WMI,全称WindowsManagementInstrumentation。是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。WMI为您提供与系统管理信息和基础WMIAPI交互的标准方法。WMI主要由系统管理应用程序开发人员和管理员用来访问和操作系统管理信息。.Framework中System.Management类提供了对WMI的支持,其中ManagementObjectSearcher用于根据指定的查询或枚举检索ManagementObject或ManagementClass对象的集合。/**////《summary》///Code:WMI搜索示例///《summary》///《paramname=“strDrivername“》驱动名称《/param》///《returns》返回找到的打印机列表《/returns》///《remarks》strDrivername支持”%“以及”_“通配符查询,类似于SQL语句中的查询《remarks》publicStringCollectionGetPrintsWithDrivername(stringstrDrivername){StringCollectionscPrinters=newStringCollection();stringstrcheck=““;if(strDrivername!=““&&strDrivername!=“*“)strcheck=“whereDriverNamelike’“+strDrivername+“’“;stringsearchQuery=“SELECTNameFROMWin_Printer“+strcheck;ManagementObjectSearchersearchPrinters=newManagementObjectSearcher(searchQuery);ManagementObjectCollectionprinterCollection=searchPrinters.Get();foreach(ManagementObjectprinterinprinterCollection){stringprintname=printer.Properties.Value.ToString();scPrinters.Add(printname);}searchPrinters.Dispose();printerCollection.Dispose();returnscPrinters;}问题看上去基本解决了,运行程序的确是获得了正确的打印机列表。可是用户用了一段时间后发现,有的时候打印机无法正确获得,看来DOT调用WMI稳定性的确有点问题啊。。。。。。WMI本身功能还是相当强大的,通过VBS基本可以涵盖WINDOWS最基本的操作。详细可以参加MSDN的文档。

  ⑽c#如何跨越网段获取MAC地址信息

  ⑾利用dns类和WMI规范获取IP及MAC地址在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.示例:stringstrHostName=Dns.GetHostName();//得到本机的主机名IPHostEntryipEntry=Dns.GetHostByName(strHostName);//取得本机IPstringstrAddr=ipEntry.AddressList.ToString();//假设本地主机为单网卡在这段代码中使用了两个类,一个是Dns类,另一个为IPHostEntry类,二者都存在于命名空间System.中.Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的DNS中检索出本地主机名.IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.要获取远程主机的IP地址,其方法也是大同小异.在获取了IP地址后,如果还需要取得网卡的MAC地址,就需要进一步探究了.这里又分两种情况,一是本机MAC地址,二是远程主机MAC地址.二者的获取是完全不同的.在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.框架中,WMI规范的实现定义在System.Management命名空间中.ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.示例:ManagementObjectSearcherquery=newManagementObjectSearcher(“SELECT*FROMWin_workAdapterConfiguration“);ManagementObjectCollectionqueryCollection=query.Get();foreach(ManagementObjectmoinqueryCollection){if(mo.ToString()==“True“)mac=mo.ToString();}获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.示例:Intldest=i_addr(remoteIP);//目的ipIntlhost=i_addr(localIP);//本地iptry{Intmacinfo=newInt();Intlen=;intres=SendARP(ldest,,refmacinfo,reflen);//发送ARP包returnConvert.ToString(macinfo,);}catch(Exceptionerr){Console.WriteLine(“Error:{}“,err.Message);}return.ToString();但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。示例程序:usingSystem.;usingSystem;usingSystem.Management;usingSystem.Runtime.InteropServices;publilassgetIP{privatestaticexternintSendARP(Intdest,Inthost,refIntmac,refIntlength);privatestaticexternInti_addr(stringip);//获取本机的IPpublicstringgetLocalIP(){stringstrHostName=Dns.GetHostName();//得到本机的主机名IPHostEntryipEntry=Dns.GetHostByName(strHostName);//取得本机IPstringstrAddr=ipEntry.AddressList.ToString();return(strAddr);}//获取本机的MACpublicstringgetLocalMac(){stringmac=null;ManagementObjectSearcherquery=newManagementObjectSearcher(“SELECT*FROMWin_workAdapterConfiguration“);ManagementObjectCollectionqueryCollection=query.Get();foreach(ManagementObjectmoinqueryCollection){if(mo.ToString()==“True“)mac=mo.ToString();}return(mac);}//获取远程主机IPpublicstringgetRemoteIP(stringRemoteHostName){IPHostEntryipEntry=Dns.GetHostByName(RemoteHostName);IPAddressIpAddr=ipEntry.AddressList;string;for(inti=;i{strAddr.ToString();}return(strAddr);}//获取远程主机MACpublicstringgetRemoteMac(stringlocalIP,stringremoteIP){Intldest=i_addr(remoteIP);//目的ipIntlhost=i_addr(localIP);//本地iptry{Intmacinfo=newInt();Intlen=;intres=SendARP(ldest,,refmacinfo,reflen);returnConvert.ToString(macinfo,);}catch(Exceptionerr){Console.WriteLine(“Error:{}“,err.Message);}return.ToString();}publicstaticvoidMain(stringargs){getIPgi=newgetIP();Console.WriteLine(“本地网卡信息:“);Console.WriteLine(gi.getLocalIP()+“-“+gi.getLocalMac());Console.WriteLine(“

  ⑿远程网卡信息:“);stringtemp=gi.getRemoteIP(“scmobile-tj“);for(inti=;i{Console.WriteLine(temp);}Console.WriteLine(gi.getRemoteMac(“...“,“...“));}}

  ⒀如何在C#中使用WMI实现远程查询和共享

  ⒁WMI对大多数开发人员来说是一个感觉比较迷惑的东西,对我来说也是如此。直到最近看了一篇关于.Management的介绍后,才对WMI有了一点点了解。下面就把自己的一点经验写给爱好C#的朋友们。WMI是一个非常强大的工具,它可以提供给我们非常强大的功能。比如在我们开发应用程序时经常需要得到本地或远程操作系统的信息。虽然看起来很平常,但是实际操作起来还是比较麻烦的,尤其当我们想要获得远程操作系统的信息时。WMI要求开发者使用WQL方式来访问对方。WQL允许我们像使用SQL-LINK查询语言一样使用它。只要你知道这些类和它的字段变量,你可以很容易的得到你想要的信息。使用WMI,使用者可以用查询精确地定义数据流。通过仅指定那些感兴趣的属性(在SELECT语句中和仅检索感兴趣的实体(使用WHERE子句这两项措施,查询限制了返回的数据量。例如,如果用户要检索计算机上所有小于MB的驱动器(驱动器C、D等:SELECT*FROMWin_LogicalDiskWHEREFreeSpace《正如你看到的那样,使用一个简单的WMI查询是相当容易的。为了实现这个结果,你需要在.中引用System.Management命名空间。只要你懂得一点数据库知识,我们就可以利用它操作所有我们的查询。System.Management命名空间是.框架中的WMI命名空间。此命名空间包括下列类对象:ManagementObject或ManagementClass:分别为单个管理对象或类。ManagementObjectSearcher:用于根据指定的查询或枚举检索ManagementObject或ManagementClass对象的集合。ManagementEventWatcher:用于预订来自WMI的事件通知。ManagementQuery:用作所有查询类的基础。下列代码向您展示了如何使用WMI列举远程机器上所有开启的进程。privatevoidRemoteEnumerate_Click(objectsender,System.EventArgse){//如果是对远程机器进行访问,必须要进行连接,本地可以省略ConnectionOptionsoConn=newConnectionOptions();//用户名和口令是你登陆对方是必须输入的,也就是对方给你分配的权限oConn.Username=“ZhangDong“;//访问对方的用户名oConn.Password=““;//访问对方的口令//ServerName是对方机器的名字,也可以是IP地址,rootcimv照抄就行ManagementPathp=newManagementPath(“ServerNamerootcimv“);ManagementScopems=newManagementScope(p,oConn);ObjectQueryoq=newObjectQuery(“SELECT*FROMWin_Process“);ManagementObjectSearcherquery=newManagementObjectSearcher(ms,oq);ManagementObjectCollectionqueryCollection=query.Get();//列举所有对像,并显示在listBox中foreach(ManagementObjectserviceinqueryCollection){//列表框中显示的是进程的名称和所在路径,当然还有其它信息,比如进程句柄、//进程优先级、现在的运行状态等,我们没有全部列举出来,感兴趣的话您可以自//己试试listBox.Items.Add(“Service:“+service);}}正像你看到的那样,实现起来并不很难,可以说相当容易。WMI方法调用WMI另一个比较有趣的方面是远程方法调用。当然方法是存在于每个WMI类中的,WMI类有自己的方法,而有的WMI类没有方法。下面我们来看一看,另外一个WMI类。Win_Share类,此WMI类共有三个方法它们是:Create,Delete,SetShareInfo我们只讲讲其中的一个Create方法,其余两个和其它WMI类的方法调用方式是一样的。其中Create方法说明如下:intCreate(StringSharePath;//共享路径,你要把那个路径共享StringShareName;//共享后,访问时的标示名称IntShareType;//共享类型,一般赋即可,表示磁盘共享IntMaxUsers;//最大用户数StringDescription;//描述StringPassWord;//访问密码返回表示成功创建共享。下面的程序创建共享后,只有点击右键后查看共享才能看见此文件夹已经共享,不然是看不出来的。就形如C$形式,系统级共享。privatevoidRemoteShare_Click(objectsender,System.EventArgse){//连接远程计算机,我们要想对其进行操作,必须先连接上ConnectionOptionsMyconnect=newConnectionOptions();Myconnect.Username=“ZhangDong“;Myconnect.Password=““;ManagementPathRemoteNameSpace=newManagementPath(“ServerNamerootcimv“);ManagementScopeMyscope=newManagementScope(RemoteNameSpace,Myconnect);//先连接上要引用的WMI类在这里我们引用Win_Share类ManagementPathSharePath=newManagementPath(“Win_Share“);ObjectGetOptionsotherOption=newObjectGetOptions(null,newTimeSpan(,,),true);ManagementClass_processClass=newManagementClass(Myscope,SharePath,otherOption);objectsharea={“C:ProgramFiles“,“我的共享“,,,“Dot实现的共享“,““};objectresult=_processClass.InvokeMethod(“Create“,sharea);MessageBox(,“返回的值是:“+result.ToString()+“共享名称:“+sharea,“共享信息“,);}针对上面的程序我们需要注意的一点就是,参数的传递形式,我们采用的是下面这种形式objectsharea={“C:ProgramFiles“,“我的共享“,,,“Dot实现的共享“,““};这个数组代表的是方法中传递的参数,WMI类中其它的方法调用都可以参照着这种形式.比如前面我们讲的,列举所有开启的进程时,如果我们想远程关闭某个开启的进程,我们需要用下面的代码来实现:foreach(ManagementObjectserviceinqueryCollection){//判断是否开启了delphi程序,如果是,关闭它if(service.ToString()==“delphi.exe“){stringTparas={““};//参数数组service.InvokeMethod(“Terminate“,Tparas);//终止方法的调用}//列举所有进程的名字,和此应用程序的路径,当然还有其它一些属性,只不过这//里没有列举出来listBox.Items.Add(“Service:“+service);}总结:关于WMI还有许多其它的功能,我希望通过本文大家能够对.中的Windows管理有所了解。同时也希望爱好C#的朋友们互相多多交流经验本答案来自于互联网,仅供参考学习作用如果您对我的回答有不满意的地方,还请您继续追问;答题不易,互相理解,互相帮助!

  ⒂如何发送文件到网络打印机,并打印(使用C#)

  ⒃问题.Framework.给我们提供了一个PrinterSettings类,以提供指定有关文档打印方式的信息,其中包括打印文档的打印机。其中的静态属性InstalledPrinters可以使我们获取安装在计算机上所有打印机的名称。但是可惜的是,该属性仅仅能够提供已安装的打印机的名称。对于获取该打印机的相关信息(如打印机类型等却无能为力。问题就产生了,由于客户无法提供打印机的SDK,所以对打印机的筛选(处于商业目的,客户要求软件只能在使用他们的打印机时才能输出只能通过打印机驱动的辨认来实现。----------------------------------------------解决方案一使用WMI获取打印机信息WMI,全称WindowsManagementInstrumentation。是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。WMI为您提供与系统管理信息和基础WMIAPI交互的标准方法。WMI主要由系统管理应用程序开发人员和管理员用来访问和操作系统管理信息。.Framework中System.Management类提供了对WMI的支持,其中ManagementObjectSearcher用于根据指定的查询或枚举检索ManagementObject或ManagementClass对象的集合。/**////《summary》///Code:WMI搜索示例///《summary》///《paramname=“strDrivername“》驱动名称《/param》///《returns》返回找到的打印机列表《/returns》///《remarks》strDrivername支持”%“以及”_“通配符查询,类似于SQL语句中的查询《remarks》publicStringCollectionGetPrintsWithDrivername(stringstrDrivername){StringCollectionscPrinters=newStringCollection();stringstrcheck=““;if(strDrivername!=““&&strDrivername!=“*“)strcheck=“whereDriverNamelike’“+strDrivername+“’“;stringsearchQuery=“SELECTNameFROMWin_Printer“+strcheck;ManagementObjectSearchersearchPrinters=newManagementObjectSearcher(searchQuery);ManagementObjectCollectionprinterCollection=searchPrinters.Get();foreach(ManagementObjectprinterinprinterCollection){stringprintname=printer.Properties.Value.ToString();scPrinters.Add(printname);}sea

  ⒄C#如何实现弹出U盘

  ⒅C#实现弹出U盘代码:ublicList《Device》Devices{get{if(_devices==null){_devices=newList《Device》();intindex=;while(true){Native.SP_DEVICE_INTERFACE_DATAinterfaceData=newNative.SP_DEVICE_INTERFACE_DATA();interfaceData.cbSize=(UInt)Marshal.SizeOf(interfaceData);if(!Native.SetupDiEnumDeviceInterfaces(_deviceInfoSet,IntPtr.Zero,ref_classGuid,(UInt)index,refinterfaceData)){interror=Marshal.GetLastWinError();if(error!=Native.ERROR_NO_MORE_ITEMS)thrownewWinException(error);break;}Native.SP_DEVINFO_DATAdevData=newNative.SP_DEVINFO_DATA();IntPtrp=Marshal.AllocHGlobal(Marshal.SizeOf(devData));Marshal.StructureToPtr(devData,p,true);UIntsize=;if(!Native.SetupDiGetDeviceInterfaceDetail(_deviceInfoSet,refinterfaceData,IntPtr.Zero,,refsize,p)){interror=Marshal.GetLastWinError();if(error!=Native.ERROR_INSUFFICIENT_BUFFER)thrownewWinException(error);}Native.SP_DEVICE_INTERFACE_DETAIL_DATAdetailDataBuffer=newNative.SP_DEVICE_INTERFACE_DETAIL_DATA();if(IntPtr.Size==)//forbitoperatingsystems{detailDataBuffer.cbSize=;}else{detailDataBuffer.cbSize=+Marshal.SystemDefaultCharSize;//forbitsystems}IntPtrpBuf=Marshal.AllocHGlobal(Marshal.SizeOf(detailDataBuffer));Marshal.StructureToPtr(detailDataBuffer,pBuf,true);if(!Native.SetupDiGetDeviceInterfaceDetail(_deviceInfoSet,refinterfaceData,pBuf,size,refsize,p)){interror=Marshal.GetLastWinError();if(error!=Native.ERROR_INSUFFICIENT_BUFFER)thrownewWinException(error);}devData=(Native.SP_DEVINFO_DATA)Marshal.PtrToStructure(p,typeof(Native.SP_DEVINFO_DATA));Marshal.FreeHGlobal(p);

  ⒆比如这个类:ManagementObjectSearcher,他在哪个命名空间组件在什么库

  ⒇在项目-》添加引用....里面引用System.Management。再usingSystem.Management就可以了。下次遇到不知道在哪个命名空间的,就放入搜索引擎找下就可以找到答案了。

您可能感兴趣的文章:

相关文章