我有一個問題查詢WMI讓我完全困惑。我正在構建的應用程序利用作爲VMware View代理的一部分安裝到VDI桌面的WMI計數器。這些計數器提供有關遠程顯示協議PCoIP的信息。從現有ManagementException - 無效的類
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應用程序,並且我使用完全相同的代碼 - 每次都有一個「Invalid Class」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相同的權限,完全相同的代碼以相同的方式被調用(通過Timer)。唯一的區別是.NET 3.5 vs 4.0 - 但很明顯,計數器是,因爲有多個應用程序可以看到它們,但是相同的數字不能。
有誰知道.NET 3.5和4.0之間的任何可能的差異會導致此?或者,爲什麼櫃檯可能對某些應用可見而不是其他的?是否有一些.NET 4.0需要的環境設置?目前,我不知道該如何解決這個問題。
我也對機器運行了WMIDiag,它也報告PCoIP性能計數器存在。他們在機器上,但某些應用程序似乎無法找到它們。 – 2013-02-11 02:09:39
我的水晶球說「將EXE項目的平臺目標設置從x86更改爲AnyCPU」。 – 2013-02-11 03:16:18
就是這樣。虛幻。我猜這意味着計數器只有64位?這也將解釋爲什麼某些應用程序可以或不可以看到它們 - 基於它們的目標平臺。謝謝你,先生! – 2013-02-11 03:33:25