4

コンソールアプリケーション(.NET)で、次のようにWMIクエリを実行しています。

ManagementObjectSearcher query;
        ObjectQuery oq;
        ManagementObjectCollection objectCollection;
        try
        {
            oq = new ObjectQuery("SELECT TotalVisibleMemorySize, FreePhysicalMemory FROM Win32_OperatingSystem");
            query = new ManagementObjectSearcher(oq);
            objectCollection = query.Get();
        }
        catch
        {
            return null;
        }
        return objectCollection;

アプリケーションで使用するために収集されたデータを除算しています。現在、私にとっては完璧に機能しています。
アプリケーションに複数のwmiクエリを使用しています。configからすべてのwmiクエリを実行する単一のメソッドを作成するには、クエリのselect句で除算を行う必要があります。
次のようにWMIクエリを実行する必要があります。

SELECT ((TotalVisibleMemorySize)/1024) as TotalVisibleMemorySize1, ((FreePhysicalMemory)/1024) as FreePhysicalMemory1 FROM Win32_OperatingSystem

このクエリでは、エラーが発生しますInvalid query
このクエリに構文上の誤りがありますか、それともWMiクエリのselect句で除算を行うことができませんか?

4

1 に答える 1

2

WMIは複雑なクエリをサポートしていないようです。最善の策は、wmiの結果をキャプチャし、必要に応じて変換することです。

foreach (ManagementObject mo in objectCollection)
{
Console.WriteLine("Total Memory = {0} MB", 
Convert.ToInt32(mo.GetPropertyValue("TotalVisibleMemorySize"))/1024);
}
于 2012-06-15T12:32:56.497 に答える