【发布时间】:2015-04-17 04:07:02
【问题描述】:
我正在编写一个需要检索 diskpart 返回的输出的 java 工具。使用带有指定脚本的 /s 选项调用 Diskpart。我正在使用具有最低 UAC 设置的 Windows 7。
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "diskpart", "/s", "c:\\dps.txt");
Process p = builder.start();
p.waitFor();
InputStream ins = p.getInputStream();
System.out.println(ins.available()); // Output: 0
使用以下行代替上面的行会产生一个空的输出文件 c:\dps_out.txt
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "diskpart", "/s", "c:\\dps.txt", ">>", "c:\\dps_out.txt" );
使用此方法调用diskpart 时,似乎没有从标准输出中读取,因为Process.getInputStream() 和Windows 输出重定向都访问标准输出并且无法读取数据。
直接调用diskpart需要提升。
ProcessBuilder builder = new ProcessBuilder("diskpart", "/s", "c:\\dps", ">>", "c:\\dps_out" );
Exception in thread "main" java.io.IOException: Cannot run program "diskpart": CreateProcess error=740, The requested operation requires elevation.
如何正确运行 diskpart 脚本并从 java 工具中读取其输出?
【问题讨论】:
标签: java cmd command output line