使用ProcessBuilder/Runtime.exec()启动的外部进程在XP上失败,适
发布时间:2020-12-14 02:21:26 所属栏目:Windows 来源:网络整理
导读:我正在开发一个 Java程序,它必须获取机器序列号,CPU序列号等.在Windows上,WMI接口是查询此类信息的最佳方式,使用命令行查询的标准方法是 wmic bios get serialnumber 产生输出: SerialNumberWWV46RT609A3467173E 将其转换为Java,我使用了Runtime.exec()和Pr
我正在开发一个
Java程序,它必须获取机器序列号,CPU序列号等.在Windows上,WMI接口是查询此类信息的最佳方式,使用命令行查询的标准方法是
wmic bios get serialnumber 产生输出: SerialNumber WWV46RT609A3467173E 将其转换为Java,我使用了Runtime.exec()和ProcessBuilder,如下所示: String ret = ""; ProcessBuilder pb = new ProcessBuilder("wmic",component,"get",item); pb.redirectErrorStream(true); // Process p = Runtime.getRuntime().exec( // "wmic " + component + " get " + item); Process p = pb.start(); InputStreamReader isr = new InputStreamReader(p.getInputStream()); BufferedReader input = new BufferedReader(isr); String str; while ((str = input.readLine()) != null) { if (str.equalsIgnoreCase(item) || StringUtils.isBlank(str)) { continue; } ret = str.trim(); } input.close(); isr.close(); System.out.println(ret); 此代码段在Windows 7上完美运行,但在Windows XP上挂起.使用命令行中的wmic可以在两个操作系统上运行. 为什么它在Windows 7上完美运行但在XP上失败?有没有办法产生一个单独的线程,又名’StreamGobbler‘? (链接的示例非常古老,早于ProcessBuilder类,其redirectErrorStream()调用. 解决方法
我希望你现在已经解决了这个问题.如果没有,这就是你需要做的.首先,我也遇到了同样的问题,并发现它是bufferedReader问题.它陷入僵局,导致windows xp挂起.解决方案是通过在命令附加“< NUL”来模拟缓冲重构器的行尾(eof).
String[] command = {"CMD","/C","WMIC COMPUTERSYSTEM GET USERNAME <NUL "} and executing this command. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读