2013-02-11 33 views
6

Tôi đang gặp sự cố khi truy vấn WMI khiến tôi hoàn toàn bối rối. Ứng dụng tôi đang xây dựng sử dụng các bộ đếm WMI được cài đặt như một phần của VMware View Agent vào một máy tính để bàn VDI. Các quầy cung cấp thông tin về giao thức hiển thị từ xa PCoIP.ManagementException - Lớp không hợp lệ

Tôi đã làm việc mã để truy vấn các quầy:

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... 
} 

Mã này là từ một hiện có, làm việc NET 3.5 ứng dụng. Bây giờ tôi đã tạo một ứng dụng .NET 4.0 mới và tôi đang sử dụng cùng một mã chính xác - nó không thành công mỗi lần với một "Management Class" không hợp lệ.

Tôi đã xác minh quyền ứng dụng là chính xác, tôi cũng đã thử truy vấn các mục khác như "Win32_Process" trong ứng dụng .NET 4.0 mới và nó hoạt động mà không có vấn đề.

Điều khó hiểu là, các quầy xuất hiện và làm việc tốt trong perfmon và wmic:

http://hirstius.com/media/stackoverflow/perfmon.png

Nhưng từ bên trong WMI CIM Studio, hoặc WMI Mã Creator - không có gì:

http://hirstius.com/media/stackoverflow/WMI_code_creator.png

Trong mọi cách tôi có thể nghĩ về các ứng dụng đều giống nhau - cùng quyền hạn trong ứng dụng của mình.manifest, cùng một mã được gọi theo cùng một cách (thông qua Bộ hẹn giờ). Sự khác biệt duy nhất là .NET 3.5 vs 4.0 - nhưng rõ ràng các quầy có nhiều hơn một ứng dụng có thể nhìn thấy chúng, nhưng không thể có một số bằng nhau.

Có ai biết về bất kỳ sự khác biệt nào có thể giữa .NET 3.5 và 4.0 có thể gây ra điều này không? Hoặc tại sao, có thể, các quầy sẽ được hiển thị cho một số ứng dụng chứ không phải những ứng dụng khác? Có một số môi trường thiết lập tôi đang thiếu đó là cần thiết cho .NET 4.0? Hiện tại tôi không biết phải đi đâu để khắc phục sự cố này nữa.

+0

Tôi cũng chạy WMIDiag với máy và nó cũng báo cáo bộ đếm PCoIP perf như hiện tại. Họ đang ở trên máy, nhưng một số ứng dụng nhất định dường như không thể tìm thấy chúng. –

+5

Quả cầu pha lê của tôi nói "thay đổi cài đặt đích nền tảng của dự án EXE từ x86 thành AnyCPU". –

+0

Đó là chính xác nó. Không có thật. Tôi đoán điều đó có nghĩa là các quầy chỉ có 64bit? Nó cũng sẽ giải thích tại sao một số ứng dụng nhất định có thể hoặc không thể nhìn thấy chúng - dựa trên nền tảng mà chúng được nhắm mục tiêu. Cảm ơn ngài! –

Trả lời

2

Như đã trình bày trong các ý kiến ​​của Hans Passant câu trả lời cho câu hỏi này là:

:

thay đổi nền tảng thiết lập từ x86 đến AnyCPU

được xác nhận bởi OP mục tiêu dự án của EXE

Tôi đoán điều đó có nghĩa là các bộ đếm chỉ là 64bit? Nó cũng sẽ giải thích tại sao một số ứng dụng nhất định có thể hoặc không thể nhìn thấy chúng - dựa trên nền tảng mà chúng được nhắm mục tiêu.