У меня возникла проблема с запросом 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? В настоящее время я не знаю, куда идти, чтобы устранить эту проблему дальше.