ManagementException - Неверный класс
У меня возникла проблема с запросом WMI, которая поставила меня в тупик. Приложение, которое я создаю, использует счетчики WMI, которые устанавливаются как часть агента VMware View на рабочий стол VDI. Счетчики предоставляют информацию о протоколе удаленного отображения PCoIP.
У меня есть рабочий код для запроса счетчиков:
ManagementObjectSearcher searcher = new ManagementObjectSearcher();
ObjectQuery generalQuery = new ObjectQuery("SELECT * FROM Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics");
// Many other queries...
searcher.Query = generalQuery;
foreach (ManagementObject obj in searcher.Get())
{
// Total session duration
ulong sessionDurationSec = Convert.ToUInt64(obj["SessionDurationSeconds"]);
// Get other items...
}
Этот код взят из существующего работающего приложения.NET 3.5. Теперь я создал новое приложение.NET 4.0 и использую точно такой же код, который каждый раз завершается с ошибкой ManagementException "Недопустимый класс".
Я проверил правильность разрешений приложений, я также попытался запросить другие элементы, такие как "Win32_Process", в новом приложении.NET 4.0, и он работает без проблем.
Самое удивительное, что счетчики появляются и отлично работают в perfmon и wmic:
http://hirstius.com/media/stackru/perfmon.png
Но из WMI CIM Studio или WMI Code Creator - ничего:
http://hirstius.com/media/stackru/WMI_code_creator.png
В любом случае я могу думать, что приложения одинаковы - одни и те же права доступа в app.manifest, точно такой же код вызывается одинаково (через таймер). Единственное отличие - это.NET 3.5 против 4.0 - но ясно, что счетчики есть, так как их могут видеть несколько приложений, но равное число не может.
Кто-нибудь знает о любой возможной разнице между.NET 3.5 и 4.0, которая может вызвать это? Или почему, возможно, счетчики будут видны для определенного приложения, а не для других? Есть ли какие-то параметры среды, которые мне не хватает, которые требуются для.NET 4.0? В настоящее время я не знаю, куда идти, чтобы устранить эту проблему дальше.
1 ответ
Как указано в комментариях Hans Passant, ответ на этот вопрос:
изменить настройку цели платформы EXE-проекта с x86 на AnyCPU
что подтверждается ОП:
Я думаю, это означает, что счетчики только 64-битные? Это также объясняет, почему определенные приложения могут или не могут их видеть - в зависимости от платформы, на которую они нацелены.