Рекомендуемые библиотеки / Howtos для использования WMI с Java?
Эй, ребята. У меня есть достаточно крупный коммерческий проект (так что платное лицензирование всегда возможно), который перемещается в пространство Windows, и я планирую провести много опросов с WMI. Это клиентское приложение Java 1.6. Есть ли какие-нибудь хорошие ресурсы или книги, чтобы я начал делать это в Java? Я чувствую, что мой.NET fu довольно силен, но я часто не знаю, с чего начать выполнять те же задачи в Java.
Спасибо!
3 ответа
Я не знаю ни одной книги, относящейся к Java, но если бы я мог предложить какой-то совет, я бы просто начал с документации WMI MSDN. Кроме того, поскольку WMI является API на основе COM, я хотел бы изучить использование моста Java-COM для доступа к API. Любое из следующего должно работать:
- Java2Com
- ДЖЕЙКОБ - пример WMI.
- J-Integra - пример WMI.
- J-Interop - пример WMI.
- Еще один инструмент Java2Com
Для Java-оболочки вокруг WMI есть библиотека jWMI.
Я хотел бы высказать несколько предупреждений относительно jWMI: в случае, если у вас нет контроля над системами, в которых будет работать ваше приложение (например, простое настольное приложение), ожидайте проблем с антивирусами. jWMI - это не настоящая библиотека, а просто утилита. Он создает файл jwmi.vbs во время полета и просто пытается выполнить его с помощью вызова времени выполнения "cmd /c". Как вы можете себе представить, антивирусы обычно недовольны таким поведением и сразу же помещают в "песочницу" / блокируют файл.
Ниже приведен пример использования Jawin для работы системы с использованием WMI.
Для запуска кода вам необходимо скачать библиотеку Jawin и добавить 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();
}