Я пытаюсь запустить программу на виртуальной машине. Эта программа пытается получить информацию о моем дисплее через 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.
Для запуска и тестирования вашей программы вам понадобится реальная (физическая) машина.