2011-01-05 8 views
20

Hey Leute. Ich habe ein ziemlich großes kommerzielles Projekt (also ist eine Lizenzierung für die Bezahlung immer eine Option), die in den Windows-Bereich eindringt, und ich plane, viele Abfragen mit WMI durchzuführen. Dies ist eine Java 1.6 Client App. Gibt es irgendwelche guten Quellen oder Bücher, um mich in Java zu starten? Ich habe das Gefühl, dass mein .NET ziemlich stark ist, aber ich weiß oft nicht, wo ich anfangen soll, um dieselben Aufgaben in Java zu erledigen.Empfohlene Bibliotheken/HowTos für die Verwendung von WMI mit Java?

Danke!

Antwort

25

Ich kenne keine Java-spezifischen Bücher, aber wenn ich einen Ratschlag geben kann, wäre es einfach mit WMI MSDN documentation zu starten. Da WMI eine COM-basierte API ist, würde ich darüber nachdenken, eine Java-to-COM-Bridge für den Zugriff auf die API zu verwenden. Jeder der folgenden sollte funktionieren:

Für einen Java-Wrapper um WMI gibt es die jWMI Bibliothek.

+0

JACOB und Apollosoft Links gebrochen sind. J-interop Beispiel Link ist kein Beispiel, es ist eine andere Frage SO. – EJP

8

Ich möchte ein paar Warnungen bezüglich der jWMI verbreiten: Falls Sie keine Kontrolle über die Systeme haben, auf denen Ihre App läuft (sagen Sie einfache Desktop-Anwendung), erwarten Sie Probleme mit den Antiviren. jWMI ist keine echte Bibliothek, sondern lediglich ein Dienstprogramm. Es erstellt eine jwmi.vbs-Datei im Flug und versucht sie einfach mit dem Runtime-Aufruf "cmd/c" auszuführen. Wie Sie sich vielleicht vorstellen können, sind die Antivirenprogramme normalerweise nicht mit einem solchen Verhalten zufrieden und blockieren oder sperren die Datei sofort.

+1

Danke für die Vorsicht. Unsere frühe Implementierung hat dies direkt getan, also ein Grund mehr, die Verwendung einer Bibliothek zu vermeiden. – Yablargo

2

Unten finden Sie ein Beispiel für die Verwendung von Jawin, um die Systembetriebszeit mithilfe von WMI zu ermitteln.

den Code ausführen zu können, müssen Sie Jawin Bibliothek zum Herunterladen und jawin.dll zu Ihrem Eclipse-Projekt-Stamm hinzufügen

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(); 
} 
Verwandte Themen