Tag: wmi

“访问被拒绝”WMIexception

我正在研究WMI。 我想访问远程系统信息。 以下代码适用于环回或本地主机,但是当我尝试访问远程计算机时,它显示以下exception错误: 访问被拒绝。 (HRESULTexception:0X8005(E_ACCESSDENIED)) 在两个系统之间使用开关时。 和 RPC服务器不可用。 (来自HRESULT的exception:0x800706BA) 当两个系统直接连接时。 两个系统上的操作系统:Windows Service Pack 2。 防火墙=被阻止。 远程过程服务=正在运行。 工具:.NET Visual Studio 2008 C# 码: try { ConnectionOptions _Options = new ConnectionOptions(); ManagementPath _Path = new ManagementPath(s); ManagementScope _Scope = new ManagementScope(_Path, _Options); _Scope.Connect(); ManagementObjectSearcher srcd = new ManagementObjectSearcher(“select * from Win32_DisplayConfiguration”); foreach (ManagementObject obj in srcd.Get()) { […]

WMI致电获取司机

我是新用的WMI。 它是什么? 我可以在C#中使用WMI调用来获取PC上的驱动程序列表吗? 如果是的话,我打电话给哪个class级?

我可以使用WMI来管理WSD设备(特别是打印机)吗?

我使用WMI与C#枚举和修改我的计算机上的打印机。 我正在运行Windows 7,当我尝试修改“经典”安装的打印机时,一切正常。 “经典”,我的意思是打印机只使用基本的TCP / IP端口。 我可以使用文档中的WMI函数重命名它,将其设置为默认打印机等: http : //msdn.microsoft.com/en-us/library/windows/desktop/aa394363(v = vs.85)。 aspx 。 但是,默认情况下,Windows将我的打印机安装为WSD(设备上的Web服务)打印机。 发生这种情况时,打印机使用WSD端口,我似乎无法使用WMI触摸。 在下面的屏幕截图中,您可以看到我的打印机正在使用“WSD端口”。 该端口下方是我的打印机在没有WSD的情况下安装时使用的标准TCP / IP端口。 我的打印机附带的软件使用标准TCP / IP端口安装打印机。 但是,当我手动安装打印机时,Windows会选择WSD端口。 WMI似乎没有为启用WSD的设备定义。 有没有人知道这是不是真的?

什么是常见的WMI查询

我正在构建一个C#监视器应用程序,它使用WMI来获取远程计算机的一些性能细节。 什么是一些很好的WMI查询来获取有用的统计数据,如CPU负载,RAM使用率,HDD可用空间等。 例如,您可以使用查询“SELECT * FROM Win32_Processor”从属性“LoadPercentage”获取CPU负载。 还有哪些其他有用的属性和查询?

为什么“Win32_CDROMDrive”类的“SerialNumber”属性在与WMI分开请求时返回null?

当从这个SELECT SerialNumber FROM Win32_CDROMDrive获取WMI类Win32_CDROMDrive中的属性SerialNumber的值时,它会通过NullReferenceException除非我将查询更改为SELECT * FROM Win32_CDROMDrive 。 然后循环arround所有属性,包括SerialNumber in – 在这种情况下不是null。 由于第一种方法比第二种方法更快(不太确定),我更喜欢使用它。 那么发生了什么? 我错过了什么吗? 请注意,它与其他属性和类完美匹配! 这是我的代码 string result = “”; var searcher = new ManagementObjectSearcher(“SELECT SerialNumber FROM Win32_CDROMDrive”); ManagementObjectCollection collec = searcher.Get(); foreach (ManagementObject obj in collec) { result = obj[“SerialNumber”].ToString(); break; } MessageBox.Show(result); 除非我改为: var searcher = new ManagementObjectSearcher(“SELECT * FROM Win32_CDROMDrive”); 更新 […]

如何从WMI spun远程进程获取退出代码

我正在通过WMI(Win32_Process Create)远程执行进程,但我无法弄清楚如何确定进程何时完成执行。 当我第一次发出命令时,有一个退出代码(0表示成功),但这只是告诉我该进程已成功生成。 有没有办法让我知道这个过程何时结束? 谢谢!

如何从远程计算机的驱动器获取可用的FreeSpace?

我正试图从远程计算机的D驱动器中获取FreeSpace。 接近尾声,我收到一个ManagementException未被用户代码“Not Found”处理 这是给出错误的行:fs = m [“FreeSpace”]。ToString(); 这是我的代码: ConnectionOptions oConn = new ConnectionOptions(); oConn.Username = “username”; oConn.Password = “password”; oConn.Authority = “ntlmdomain:XXX”; ManagementScope scope = new ManagementScope(“\\\\Remote_Computer\\root\\CIMV2”, oConn); scope.Connect(); ObjectQuery query = new ObjectQuery(“SELECT DeviceID, VolumeName FROM Win32_LogicalDisk where DeviceID = ‘D:'”); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection queryCollection = searcher.Get(); foreach (ManagementObject m […]

是否有必要处理每个ManagementObject?

我注意到ManagementObject是IDisposable ,但它也是从ManagementClass.GetInstances()和ManagementObjectSearcher.Get() ,这是否意味着我需要处理遇到的每个对象? 像这样: ManagementObject ret; foreach(ManagementObject mo in searcher.Get()) { if( IsWhatIWant(mo) ) ret = mo; else mo.Dispose(); } 进一步混淆了这一点: ManagementBaseObject中有一个错误,它没有正确实现IDisposable (请参阅Using子句无法调用Dispose? )所以你需要自己调用它,或者使用一个正确调用它的包装器。 这很烦人,因为我有很多ManagementObjectCollections 。

Win32_ProcessStartTrace的ManagementEventWatcher不再适用于Win 8.1

在过去的几个月里,我一直在使用ManagementEventWatcher来监视新流程的开始,并且它没有任何问题。 但是,我刚刚再次尝试了我的应用程序,似乎新进程的事件不再被调用。 以下是示例代码: var startWatch = new ManagementEventWatcher(new WqlEventQuery(“SELECT * FROM Win32_ProcessStartTrace”)); 事件: private static void ProcessStart_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine(“AppStarted”); } 我还在另一个朋友的机器(也是Win 8.1)上测试了这个机器,它有一个旧的二进制文件(在过去的几个月中也运行得很好),他也不再接收这些事件。 这个问题似乎只存在于Win32_ProcessStartTrace中,因为Win32_ProcessStopTrace工作得很好,并在进程停止时接收事件。 最近是否有任何Windows更新可能会干扰这个? 我的系统的env自上次工作以来没有改变(除了赢得更新)。

如果我不知道它的类型,如何从远程计算机获取注册表值? (C#)

根据存储的值类型,我必须使用以下方法之一: GetBinaryValue GetDWORDValue GetExpandedStringValue GetMultiStringValue GetStringValue 如果我所知道的值是hive,key和value name,我不想尝试所有五个。 有没有办法做到这一点? 我正在使用WMI,但如果唯一的方法是使用advapi32.dll方法,我对此持开放态度。