ManagementException - Невалиден клас

Имам проблем със заявката за WMI, който ме обърка напълно. Приложението, което създавам, използва WMI броячи, които са инсталирани като част от VMware View Agent в 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/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 perf като налични. Те са на машината, но някои приложения изглежда не могат да ги намерят.   -  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

което се потвърждава от ОП:

Предполагам, че това означава, че броячите са само 64-битови? Това също би обяснило защо определени приложения могат или не могат да ги видят - въз основа на това към коя платформа са били насочени.

person Community    schedule 02.02.2014