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-битные? Это также объясняет, почему определенные приложения могут или не могут их видеть - в зависимости от платформы, на которую они нацелены.

Другие вопросы по тегам