You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:能否在Java代码中访问Win32_OperatingSystem类?

在Java中访问Win32_OperatingSystem类的实现方法

当然可以在Java代码中访问Win32_OperatingSystem类,下面给你两种实用的实现方式:

方法1:通过JACOB库调用WMI

JACOB是Java到COM的桥接库,能直接和Windows的WMI服务交互,实现和VB/C#类似的调用逻辑。

首先引入JACOB依赖(以Maven为例):

<dependency>
    <groupId>net.sf.jacob-project</groupId>
    <artifactId>jacob</artifactId>
    <version>1.19</version>
</dependency>

核心实现代码:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;

public class WmiOsQuery {
    public static void main(String[] args) {
        ComThread.InitMTA();
        try {
            // 连接本地WMI服务的cimv2命名空间
            ActiveXComponent wmi = new ActiveXComponent("winmgmts:\\\\.\\root\\cimv2");
            // 执行Win32_OperatingSystem查询
            Dispatch osCollection = wmi.invoke("ExecQuery", new Variant("SELECT * FROM Win32_OperatingSystem")).toDispatch();
            EnumVariant enumVariant = new EnumVariant(osCollection);
            
            while (enumVariant.hasMoreElements()) {
                Dispatch osInstance = enumVariant.nextElement().toDispatch();
                // 读取系统属性
                String systemName = Dispatch.get(osInstance, "Caption").getString();
                String systemVersion = Dispatch.get(osInstance, "Version").getString();
                String installDate = Dispatch.get(osInstance, "InstallDate").getString();
                
                System.out.println("系统名称: " + systemName);
                System.out.println("系统版本: " + systemVersion);
                System.out.println("安装日期: " + installDate);
            }
        } finally {
            // 必须释放COM线程资源,避免内存泄漏
            ComThread.Release();
        }
    }
}

方法2:调用系统wmic命令(无额外依赖)

如果不想引入第三方库,可直接通过Java调用Windows自带的wmic命令,解析输出结果:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class WmicOsQuery {
    public static void main(String[] args) {
        try {
            // 执行wmic命令查询指定属性
            Process process = new ProcessBuilder("wmic", "os", "get", "Caption,Version,InstallDate", "/format:list").start();
            // 注意中文系统需指定GBK编码读取输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
            
            String line;
            while ((line = reader.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty()) continue;
                
                String[] keyValue = line.split("=", 2);
                if (keyValue.length != 2) continue;
                
                String key = keyValue[0].trim();
                String value = keyValue[1].trim();
                
                switch (key) {
                    case "Caption":
                        System.out.println("系统名称: " + value);
                        break;
                    case "Version":
                        System.out.println("系统版本: " + value);
                        break;
                    case "InstallDate":
                        System.out.println("安装日期: " + value);
                        break;
                }
            }
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这种方法无需额外依赖,但要注意适配不同Windows版本的wmic输出格式,以及编码问题。

内容的提问来源于stack exchange,提问作者John B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:16:04