我正在尝试在虚拟机中运行一个程序,该程序尝试通过 Windows WMI 使用查询获取我的显示信息:
var success = true;
List<Display> displays = new List<Display>();
// Query WmiMonitorBasicDisplayParams to retrieve display parameters
using (var searcher = new ManagementObjectSearcher(@"Root\WMI", "SELECT * FROM
WmiMonitorBasicDisplayParams"))
using (var results = searcher.Get())
由于某种原因,Windows WMI 无法获取我的虚拟显示器的显示信息,并且程序崩溃并引发此异常:
Unhandled exception. System.Management.ManagementException: Not supported
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()
这在每个虚拟机中都会发生,并且显示器始终被归类为非 PnP 设备。
那么我该如何模拟真正的内部显示器?(比如笔记本电脑显示器)以便 Windows WMI 不会使程序崩溃?否则有没有办法拦截和修改 WMI 查询的结果,然后将其返回给程序 c# 代码?
答案1
虚拟机应用程序(VMware、Virtual Box、Hyper-V)为客户机创建虚拟硬件(而不是真实硬件)。
那么我该如何模拟真正的内部显示器?(比如笔记本电脑显示器)以便 Windows WMI 不会使程序崩溃?否则有没有办法拦截和修改 WMI 查询的结果,然后将其返回给程序 c# 代码?
你不能(正如我的第一条评论)。你尝试做的事情在虚拟机中无法实现。
我同时使用 VMware 和 Hyper-V
您需要一台真实的(物理)机器来运行和测试您的程序。