ねえフォークス。私はかなり大規模な商用プロジェクトを持っており(したがって、有料ライセンスは常にオプションです)、Windowsスペースに移行しており、WMIを使用して多くのポーリングを行うことを計画しています。これはJava 1.6クライアントアプリです。Javaでこれを実現するための優れたリソースや書籍はありますか?.NET fuはかなり強力だと思いますが、よくしません。 Javaで同じタスクを実行するためにどこから始めればよいかわからない。
ありがとう!
Javaに固有の本は知りませんが、アドバイスがあれば、WMI MSDN documentation から始めることをお勧めします。また、WMIはCOMベースのAPIであるため、APIにアクセスするためにJava toCOMブリッジを使用することを検討します。次のいずれかが機能するはずです。
Java WMIのラッパーの場合、 jWMI ライブラリがあります。
JWMIに関する警告を広めたいと思います。アプリが実行されるシステム(単純なデスクトップアプリケーションなど)を制御できない場合は、ウイルス対策の問題が発生する可能性があります。 jWMIは実際のライブラリではなく、単なるユーティリティです。飛行中にjwmi.vbsファイルを作成し、「cmd/c」ランタイム呼び出しで実行しようとします。ご想像のとおり、アンチウイルスは通常、このような動作に満足せず、ファイルをすぐにサンドボックス化/ブロックします。
以下は、 Jawin を使用してWMIを使用してシステムの稼働時間を取得する例です。
コードを実行するには、 Jawin ライブラリをダウンロードし、Eclipseプロジェクトルートにjawin.dll
を追加する必要があります。
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();
}