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 "Invalid Class".

Я проверил правильность разрешений приложения, я также попытался запросить другие элементы, такие как «Win32_Process», в новом приложении .NET 4.0, и он работает без проблем.

Озадачивает то, что счетчики появляются и нормально работают в perfmon и wmic:

http://hirstius.com/media/stackoverflow/perfmon.png

Но из WMI CIM Studio или WMI Code Creator — ничего:

http://hirstius.com/media/stackoverflow/WMI_code_creator.png

Во всех отношениях я могу думать, что приложения одинаковы - одни и те же разрешения в app.manifest, точно такой же код вызывается одним и тем же способом (через таймер). Единственная разница заключается в .NET 3.5 и 4.0, но ясно, что счетчики присутствуют, поскольку их могут видеть более одного приложения, а равное количество — нет.

Кто-нибудь знает о какой-либо возможной разнице между .NET 3.5 и 4.0, которая могла бы вызвать это? Или почему, возможно, счетчики будут видны одному приложению, а не другому? Есть ли какой-то параметр среды, который мне не хватает, который требуется для .NET 4.0? В настоящее время я не знаю, куда идти, чтобы устранить эту проблему дальше.


person Rex Remus    schedule 11.02.2013    source источник
comment
Я также запустил WMIDiag на машине, и он также сообщает о наличии счетчиков производительности PCoIP. Они есть на машине, но некоторые приложения не могут их найти.   -  person Rex Remus    schedule 11.02.2013
comment
Мой хрустальный шар говорит, что измените настройку целевой платформы проекта EXE с x86 на AnyCPU.   -  person Hans Passant    schedule 11.02.2013
comment
Это было именно так. Нереальный. Я предполагаю, что это означает, что счетчики только 64-битные? Это также объясняет, почему некоторые приложения могут или не могут их видеть, в зависимости от того, для какой платформы они предназначены. Спасибо, сэр!   -  person Rex Remus    schedule 11.02.2013


Ответы (1)


Как указано в комментариях Hans Passant, ответ на этот вопрос:

изменить настройку целевой платформы проекта EXE с x86 на AnyCPU

что подтверждается OP:

Я предполагаю, что это означает, что счетчики только 64-битные? Это также объясняет, почему некоторые приложения могут или не могут их видеть, в зависимости от того, для какой платформы они предназначены.

person Community    schedule 02.02.2014