我试图使用进程生成器打印chrome的版本,当我直接在Windows命令提示符下执行wmic命令时,此命令在命令提示符下工作正常,而在进程生成器中不起作用
String path= "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe";
String[] cmd = { "CMD", "/C", "wmic datafile where name="+path+" get Version /value" };
ProcessBuilder probuilder = new ProcessBuilder(cmd);
Thread.sleep(5000);
Process p = probuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String readline;
int i = 0;
while ((readline = reader.readLine()) != null) {
System.out.println(++i + " " + readline);
}
}
预期
它必须打印以下输出:Version = 55.0.2883.87
提出一些解决方案
最佳答案
尝试
String[] cmd = { "CMD", "/C", "wmic datafile where \"name='"+path+"'\" get Version /value" };
您需要像这样引用的路径:
"name='C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'"
我认为即使您没有cmd也可以直接执行
wmic
。编辑整个代码片段(在wmic路径中也需要双斜杠):
Runtime rt = Runtime.getRuntime();
String path= "C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe";
Process p2=Runtime.getRuntime().exec("cmd /C wmic datafile where 'name=\""+path+"\"' get Version ");
BufferedReader reader = new BufferedReader(new InputStreamReader(p2.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p2.getErrorStream()));
String readline;
System.out.println("Output:\n");
while ((readline = reader.readLine()) != null) {
System.out.println(readline);
}
System.out.println("Errors:\n");
while ((readline = stdError.readLine()) != null) {
System.err.println(readline);
}