推荐用于在Java中使用WMI的库/ howtos?

时间:2011-01-05 22:58:11

标签: windows wmi java

嘿伙计们。我有一个相当大的商业项目(所以付费许可总是一个选项),正在进入Windows领域,我正在计划用WMI做很多轮询。这是一个Java 1.6客户端应用程序。是否有任何好的资源或书籍让我开始在java中完成这个?我觉得我的.NET fu非常强大,但我常常不知道从哪里开始用Java完成相同的任务。

谢谢!

3 个答案:

答案 0 :(得分:25)

我不知道任何特定于Java的书籍,但如果我可以提供一些建议,那就是从WMI MSDN documentation开始。此外,由于WMI是基于COM的API,因此我将研究如何使用Java to COM桥来访问API。以下任何一项都应该有效:

对于WMI的Java包装器,有jWMI库。

答案 1 :(得分:8)

我想就jWMI传达一些警告:如果您无法控制应用程序运行的系统(比如简单的桌面应用程序),那么预计会出现与防病毒软件有关的问题。 jWMI不是一个真正的库,而只是一个实用程序。它在飞行中创建一个jwmi.vbs文件,并尝试使用“cmd / c”运行时调用执行它。正如您可能想象的那样,防病毒软件通常不满意此类行为,并立即对文件进行沙箱/阻止。

答案 2 :(得分:2)

以下是使用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();
}