2011-01-05 17 views
20

ヘイフォークス。私は合理的に大規模な商用プロジェクトを持っています(有料のライセンスはいつでもオプションです)、窓のスペースに移動しており、WMIでポーリングをたくさん行う予定です。これはJava 1.6クライアントアプリケーションです。私がJavaでこれを達成するのを始めるための良いリソースや書籍はありますか?私は.NET fuがかなり強力だと感じていますが、Javaで同じタスクをどこから開始するのかはよくわかりません。JavaでWMIを使用するための推奨ライブラリ/ハウツーですか?

ありがとうございます!

答えて

25

私はJavaに固有の本を知りませんが、私はいくつかのアドバイスを提供することができますが、それはWMI MSDN documentationから始めることです。また、WMIはCOMベースのAPIなので、APIにアクセスするためのJava to COMブリッジを使用します。以下のいずれかの作業をする必要があります:

jWMIライブラリがあります。

+0

JACOBとApollosoftリンクが壊れているにjawin.dllを追加する必要があります。 J-interopの例のリンクは例ではありません、それは別のSOの質問です。 – EJP

8

私はjWMIに関するいくつかの警告を広げたいと思います:あなたのアプリケーションが実行されるシステム(単純なデスクトップアプリケーション)を制御できない場合は、アンチウィルスの問題を予期します。 jWMIは実際のライブラリではなく、単なるユーティリティです。これは飛行中にjwmi.vbsファイルを作成し、単に "cmd/c"ランタイムコールでそれを実行しようとします。想像しているように、アンチウイルスは通常、そのような動作やサンドボックスには満足していないため、すぐにファイルをブロックします。

+1

ありがとうございました。私たちの初期の実装はこれを直接行っていたので、同じことをするためにライブラリを使用するのを避けるもう一つの理由がありました。 – Yablargo

2

Jawinを使用してWMIを使用してシステムの稼働時間を取得する例を以下に示します。

がコードを実行するには、 Jawinライブラリをダウンロードして、Eclipseプロジェクトのルート

public static void main(String[] args) throws COMException { 
String computerName = ""; 
String userName = ""; 
String password = ""; 
String namespace = "root/cimv2"; 

String queryProcessor = "SELECT * FROM Win32_OperatingSystem"; 

DispatchPtr dispatcher = null; 

try { 

    ISWbemLocator locator = new ISWbemLocator(
      "WbemScripting.SWbemLocator"); 
    ISWbemServices wbemServices = locator.ConnectServer(computerName, 
      namespace, userName, password, "", "", 0, dispatcher); 
    ISWbemObjectSet wbemObjectSet = wbemServices.ExecQuery(
      queryProcessor, "WQL", 0, null); 
    DispatchPtr[] results = new DispatchPtr[wbemObjectSet.getCount()]; 
    IUnknown unknown = wbemObjectSet.get_NewEnum(); 
    IEnumVariant enumVariant = (IEnumVariant) unknown 
      .queryInterface(IEnumVariant.class); 

    enumVariant.Next(wbemObjectSet.getCount(), results); 

    for (int i = 0; i < results.length; i++) { 
     ISWbemObject wbemObject = (ISWbemObject) results[i] 
       .queryInterface(ISWbemObject.class); 

     System.out.println("Uptime: " 
       + wbemObject.get("LastBootUpTime")); 
    } 
} catch (COMException e) { 
    e.printStackTrace(); 
} 
関連する問題