6

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に必要な、不足している環境設定はありますか?現在、これをさらにトラブルシューティングするためにどこに行けばよいかわかりません。

4

1 に答える 1

2

Hans Passantのコメントで述べられているように、この質問に対する答えは次のとおりです。

EXEプロジェクトのプラットフォームターゲット設定をx86から​​AnyCPUに変更します

これはOPによって確認されています:

カウンターが64ビットのみであることを意味すると思いますか?また、対象となるプラットフォームに基づいて、特定のアプリがそれらを表示できる、または表示できない理由についても説明します。

于 2014-02-02T20:56:07.177 に答える