我正在编写一个需要检索diskpart返回的输出的java工具。使用带有指定脚本的/ s选项调用Diskpart。我使用Windows 7的UAC设置尽可能低。
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工具中读取其输出?
答案 0 :(得分:0)
你的问题是什么?
这是来自DiskPart的清单。
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"
/>
</requestedPrivileges>
Cmd不需要管理员权限,因此有效(它设置为AsInvoker
)。由于清单 - requireAdministrator
。