我正在编写一个java工具,它需要检索diskpart返回的输出。Diskpart是通过指定脚本使用/s选项调用的。我使用的是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.如何在java工具中正确运行diskpart脚本并读取其输出?
发布于 2015-02-17 03:27:17
你的问题是什么?
这来自DiskPart的清单。
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"
/>
</requestedPrivileges>Cmd不需要管理员访问权限,因此可以正常工作(设置为AsInvoker)。由于DiskPart - requireAdministrator的原因,直接调用manifest不起作用。
https://stackoverflow.com/questions/28544944
复制相似问题