Bibliotecas recomendadas / howtos para usar WMI con java?

Hey 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.

¡Gracias!

No conozco ningún libro específico para Java, pero si puedo ofrecer algunos consejos sería comenzar con la documentación de WMI MSDN. 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 los siguientes debería funcionar:

  • Java2Com
  • JACOB – Un ejemplo de WMI.
  • J-Integra – Un ejemplo de WMI.
  • J-Interop : un ejemplo de WMI.
  • Otra herramienta Java2Com

Para un contenedor de Java alrededor de WMI, existe la biblioteca jWMI .

Me gustaría difundir algunas advertencias con respecto a jWMI: en caso de que no tenga control sobre los sistemas donde 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.

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

Para ejecutar el código, deberá descargar la biblioteca de Jawin y agregar jawin.dll a la raíz del proyecto de 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(); }