Подтвердить что ты не робот

Рекомендуемые библиотеки /howtos для использования WMI с java?

Эй, народ. У меня есть достаточно большой коммерческий проект (так что лицензия на оплату труда всегда является опцией), которая перемещается в пространство Windows, и я планирую делать много опросов с WMI. Это клиентское приложение Java 1.6. Есть ли хорошие ресурсы или книги, чтобы я начал заниматься этим в java? Я чувствую, что .NET fu довольно силен, но я часто не знаю, с чего начать выполнять те же задачи в Java.

Спасибо!

4b9b3361

Ответ 1

Я не знаю каких-либо книг, специфичных для Java, но если я могу предложить некоторые советы, то просто начать с WMI MSDN документация. Кроме того, поскольку WMI - это API на основе COM, я бы рассмотрел использование моста Java для COM для доступа к API. Любое одно из следующих действий должно работать:

Для оболочки Java вокруг WMI существует библиотека jWMI.

Ответ 2

Я хотел бы распространить некоторое предупреждение о jWMI: в случае, если у вас нет контроля над системами, в которых будет работать ваше приложение (скажем, простое настольное приложение), ожидайте проблемы с антивирусами. jWMI - это не настоящая библиотека, а просто утилита. Он создает файл jwmi.vbs в полете и просто пытается выполнить его с вызовом Runtime "cmd/c". Как вы можете себе представить, антивирусы, как правило, недовольны таким поведением и песочницей/блокируют файл немедленно.

Ответ 3

Ниже приведен пример использования Jawin для обеспечения работоспособности системы с использованием WMI.

Чтобы запустить код, вам необходимо загрузить Jawin библиотеку и добавить jawin.dll в свой корневой проект 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();
}