仮想マシンでプログラムを実行しようとしています。このプログラムは、クエリを使用して 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の両方を使用しています
プログラムを実行してテストするには、実際の(物理的な)マシンが必要です。