Java:运行diskpart脚本并读取输出

时间:2015-02-16 15:35:47

标签: java cmd command output line

我正在编写一个需要检索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工具中读取其输出?

1 个答案:

答案 0 :(得分:0)

你的问题是什么?

这是来自DiskPart的清单。

    <requestedPrivileges>
        <requestedExecutionLevel
            level="requireAdministrator"
            uiAccess="false"
        />
    </requestedPrivileges>

Cmd不需要管理员权限,因此有效(它设置为AsInvoker)。由于清单 - requireAdministrator

,直接调用DiskPart将无法正常工作