【发布时间】:2011-06-04 08:22:09
【问题描述】:
大家好。我有一个相当大的商业项目(因此付费许可始终是一种选择)正在进入 Windows 空间,我计划使用 WMI 进行大量轮询。这是一个 Java 1.6 客户端应用程序。有没有什么好的资源或书籍可以让我开始用java完成这个?我觉得我的 .NET 功能很强大,但我经常不知道从哪里开始在 Java 中完成相同的任务。
谢谢!
【问题讨论】:
大家好。我有一个相当大的商业项目(因此付费许可始终是一种选择)正在进入 Windows 空间,我计划使用 WMI 进行大量轮询。这是一个 Java 1.6 客户端应用程序。有没有什么好的资源或书籍可以让我开始用java完成这个?我觉得我的 .NET 功能很强大,但我经常不知道从哪里开始在 Java 中完成相同的任务。
谢谢!
【问题讨论】:
【讨论】:
我想对 jWMI 提出一些警告:如果您无法控制应用程序将运行的系统(比如简单的桌面应用程序),那么防病毒软件可能会出现问题。 jWMI 不是一个真正的库,而仅仅是一个实用程序。它会在飞行中创建一个 jwmi.vbs 文件,并尝试使用“cmd /c”运行时调用来执行它。正如您可能想象的那样,防病毒软件通常对此类行为不满意,并立即沙箱/阻止文件。
【讨论】:
以下是使用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();
}
【讨论】: