3

私はこれを行う方法について頭を悩ませています。約2か月前に、wmi呼び出しから単一の要素を取得する方法を示すリンクを見つけました。

class Sample
{
    public static int Main(string[] args)
    {
        ManagementObject o =
            new ManagementObject("Win32_Service.Name='Alerter'");

        //or with a full path :

        ManagementObject mObj =
            new ManagementObject(
            "\\\\MyServer\\root\\MyApp:MyClass.Key='abc'");

        return 0;
    }
}

これは、WMIを完全に検索して1つのプロパティを取得するよりもはるかに高速に結果を返すため、すばらしいと思いました。私はそれをいじって、このコードをWin32_ComputerSystemで動作させるようにしました。また、Win32_DiskDriveやBaseBoardでも動作するようにしたと思いますが、特定のコードが見つからないため、頭のてっぺんから思い出せません。 。だから今、私はそれをWin32_BIOSで動作させて、目立たせ続けようとしています。有効な結果を返すように「key」プロパティが見つからないようです。

私は無駄に次のパスを試しました。

\\.\root\cimv2:Win32_BIOS.SoftwareElementState=3
\\.\root\cimv2:Win32_BIOS.TargetOperatingSystem=0
\\.\root\cimv2:Win32_BIOS.SoftwareElementState=3,TargetOperatingSystem=0

Win32_BIOSクラスで見つけた2つのキーは、名前とバージョンです。しかし、バージョンは私が必要としているものです。別のコンピューターでこれを取得しようとしているので、名前をハードコーディングするだけでなく、BIOS名を取得する別の方法を見つけることができません。だから私はちょっと立ち往生していると思います。何か案は?

4

2 に答える 2

3

探している WMI オブジェクト パスは、Name、SoftwareElementID、SoftwareElementState、TargetOperatingSystem、および Version プロパティによって形成されます。

そして、このように見えます

Win32_BIOS.Name="Ver 1.00 BIOS A05 PARTTBL",SoftwareElementID="Ver 1.00 BIOS A05 PARTTBL",SoftwareElementState=3,TargetOperatingSystem=0,Version="DELL   - 6040000"

特定のインスタンスのオブジェクト パスを知りたい場合は、Wmi delphi コード クリエーターなどのツールを使用できます。

ここに画像の説明を入力

于 2012-04-25T21:52:28.957 に答える
0

WMI を使用して、LAN 全体のネットワーク インターフェイス情報を列挙します。これは、必要なことを実行するコードの簡素化されたセットです。コンピューター名の置き換えは簡単であることがわかります。また、LAN を介して別のコンピューターにクエリを実行する場合は、ConnectionOptions オブジェクトで資格情報を提供する必要があります。

String path = @"\\{0}\ROOT\CIMV2";
String BiosVersion = String.Empty;

ConnectionOptions co = new ConnectionOptions();
ManagementScope scope = 
    new ManagementScope(String.Format(path, "."), co);

scope.Connect();

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_BIOS");
ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);

ManagementObjectCollection moc = search.Get();

foreach (ManagementObject mo in moc)
{
    BiosVersion = (String)mo["SMBIOSBIOSVersion"];
}
于 2012-04-25T19:06:34.100 に答える