【问题标题】:Recommended libraries/howtos for using WMI with java? [closed]将 WMI 与 java 一起使用的推荐库/howtos? [关闭]
【发布时间】:2011-06-04 08:22:09
【问题描述】:

大家好。我有一个相当大的商业项目(因此付费许可始终是一种选择)正在进入 Windows 空间,我计划使用 WMI 进行大量轮询。这是一个 Java 1.6 客户端应用程序。有没有什么好的资源或书籍可以让我开始用java完成这个?我觉得我的 .NET 功能很强大,但我经常不知道从哪里开始在 Java 中完成相同的任务。

谢谢!

【问题讨论】:

    标签: windows wmi java


    【解决方案1】:

    我不知道任何专门针对 Java 的书籍,但如果我能提供一些建议,那就是从 WMI MSDN documentation 开始。此外,由于 WMI 是基于 COM 的 API,因此我会考虑使用 Java 到 COM 桥接器来访问 API。以下任何一项都应该有效:

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

    【讨论】:

    • JACOB 和 Apollosoft 链接已损坏。 J-interop 示例链接不是示例,这是另一个 SO 问题。
    【解决方案2】:

    我想对 jWMI 提出一些警告:如果您无法控制应用程序将运行的系统(比如简单的桌面应用程序),那么防病毒软件可能会出现问题。 jWMI 不是一个真正的库,而仅仅是一个实用程序。它会在飞行中创建一个 jwmi.vbs 文件,并尝试使用“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();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2012-04-08
      • 2014-01-21
      相关资源
      最近更新 更多