2

私はこのコードを使用してプロセッサIDを取得しています:

    public static string getProcessorId()
    {
        var mc = new ManagementClass("Win32_Processor");
        var moc = mc.GetInstances();

        foreach (var mo in moc)
        {
            return mo.Properties["ProcessorId"].Value.ToString();
        }

        return "Unknown";
    }

Windows732ビットのVisualStudio2008を実行しています。残念ながら、mc.GetInstances()メソッドの呼び出しによって「見つかりません」という例外が発生しています。

これが同様のコードです(HDDシリアルをフェッチします):

    public static string getVolumeSerialNumber()
    {
        var disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
        disk.Get();
        return disk["VolumeSerialNumber"].ToString();
    }

このコードも失敗します。「disk.Get()」メソッドは「無効なクラス」例外を発生させます。

このコードをUACをオフにしてからオンにして実行しましたが、何も役に立ちません。

私は何が間違っているのですか?

4

1 に答える 1

2

WMIのインストールがやや壊れているようです。UACをオンにしたWindows7でgetProcessorIdコードをテストしましたが、正常に動作します。「Win32_Processor」は、そこにあるはずの本当に標準的なクラスです。

WMIの問題を診断するのに役立つリンクは次のとおりです。WMIリポジトリを再構築する前に確認する方法

于 2010-12-26T13:58:18.810 に答える