WMIのクエリで問題が発生し、完全に困惑しています。私が構築しているアプリケーションは、VMwareViewAgentの一部としてVDIデスクトップにインストールされているWMIカウンターを利用します。カウンタは、リモート表示プロトコル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...
}
このコードは、既存の動作中の.NET3.5アプリケーションからのものです。これで、新しい.NET 4.0アプリケーションを作成しましたが、まったく同じコードを使用しています。これは、「無効なクラス」のManagementExceptionで毎回失敗します。
アプリケーションのアクセス許可が正しいことを確認しました。また、新しい.NET 4.0アプリケーションで「Win32_Process」などの他のアイテムをクエリしてみましたが、問題なく動作します。
不可解なことは、カウンターが表示され、perfmonとwmicで正常に機能することです。
http://hirstius.com/media/stackoverflow/perfmon.png
しかし、WMI CIM Studio、またはWMIコードクリエーター内から-何もありません:
http://hirstius.com/media/stackoverflow/WMI_code_creator.png
すべての点で、アプリケーションは同じであると考えることができます。app.manifest内の同じアクセス許可、まったく同じコードが同じ方法で(タイマーを介して)呼び出されます。唯一の違いは.NET3.5と4.0ですが、複数のアプリケーションがカウンターを認識できるので、カウンターが存在することは明らかですが、同じ数のカウンターは認識できません。
これを引き起こす可能性のある.NET3.5と4.0の違いを知っている人はいますか?または、おそらく、カウンターが特定のアプリケーションに表示され、他のアプリケーションには表示されないのはなぜですか?.NET 4.0に必要な、不足している環境設定はありますか?現在、これをさらにトラブルシューティングするためにどこに行けばよいかわかりません。