2011-01-05 17 views
20

Hola gente. Tengo un proyecto comercial razonablemente grande (por lo que la licencia de pago es siempre una opción) que se está moviendo al espacio de Windows y estoy planeando hacer muchas encuestas con WMI. Esta es una aplicación de cliente Java 1.6. ¿Existen buenos recursos o libros para ayudarme a lograr esto en Java? Siento que mi .NET fu es bastante fuerte, pero a menudo no sé por dónde empezar para realizar las mismas tareas en Java.Bibliotecas recomendadas/howtos para usar WMI con java?

Gracias!

Respuesta

25

No conozco ningún libro específico para Java, pero si puedo ofrecer algunos consejos sería simplemente comenzar con WMI MSDN documentation. Además, dado que WMI es una API basada en COM, buscaría usar un puente de Java a COM para acceder a la API. Cualquiera de lo siguiente debe funcionar:

Para una capa Java alrededor de WMI, no es la biblioteca jWMI.

+0

Jacob y Apollosoft enlaces están rotos. El enlace de ejemplo J-interop no es un ejemplo, es otra pregunta SO. – EJP

8

Me gustaría difundir algunas advertencias sobre el jWMI: en caso de que no tenga control sobre los sistemas en los que se ejecutará su aplicación (digamos una aplicación de escritorio simple), espere problemas con los antivirus. jWMI no es una biblioteca real, sino simplemente una utilidad. Crea un archivo jwmi.vbs en vuelo y simplemente intenta ejecutarlo con la llamada en tiempo de ejecución "cmd/c". Como se puede imaginar, los antivirus normalmente no están contentos con dicho comportamiento y sandbox/bloquear el archivo de inmediato.

+1

Gracias por la precaución. Nuestra implementación temprana hizo esto directamente, por lo que una razón más para evitar el uso de una biblioteca para hacer lo mismo. – Yablargo

2

A continuación se muestra un ejemplo del uso de Jawin para obtener el tiempo de actividad del sistema mediante WMI.

Para ejecutar el código, tendrá que descargar Jawin biblioteca y añadir a su jawin.dll Eclipse raíz del proyecto

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(); 
} 
Cuestiones relacionadas