2012-04-25 8 views
3

私はこれを行う方法を頭に入れています。私は約2ヶ月前にwmi呼び出しから単一の要素を取得する方法を示したリンクを発見しました。パス文字列を使用してWin32_BIOSバージョンを取得しようとしています

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で動作させるように努力しています。私は "キー"プロパティを見つけることができないので、有効な結果が返されます。

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

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

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

+1

WMIコード作成ツールを試しましたか? http://www.microsoft.com/download/en/details.aspx?id=8572 – Tergiver

+0

@Tergiverそのリンクをありがとう、それは有用だった。この番組を見てよかったです。 –

答えて

3

あなたが探しているWMIオブジェクトパスは名前、SoftwareElementID、SoftwareElementState、TargetOperatingSystemおよびVersionプロパティにより形成されています。

そして、あなたはあなたがWmi delphi code creatorのようなツールを使用することができます特定のインスタンスのオブジェクトパスかどうかを知りたい場合は、この

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

のように見えます。

enter image description here

+0

私はこれを私のデバッグエディタで見たと思いますが、Win32_biosを使いたかったので信じたくありませんでした。しかたがない。私は組み込みコントローラだけに固執しなければならないと思う。 –

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"]; 
} 
+0

私はManagementObjectSearcherを使いたくありません。私はネットワーク上でこれをやろうとはしていませんが、むしろ個々のコンピュータ上ではローカルに行います。サーチャークラスとforeachループをとる時間は、私たちが使用しているコンピュータで十分ですが、私はそれを使用する余裕がありません。あなたの提案に感謝します。 –

関連する問題