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

Java:运行diskpart脚本并读取输出,java,cmd,command,output,line,Java,Cmd,Command,Output,Line,我正在编写一个java工具,它需要检索diskpart返回的输出。使用带有指定脚本的/s选项调用Diskpart。我使用的是尽可能低的UAC设置的Windows7 ProcessBuilder=newprocessbuilder(“cmd.exe”、“/c”、“diskpart”、“/s”、“c:\\dps.txt”); 进程p=builder.start(); p、 waitFor(); InputStream ins=p.getInputStream(); System.out.printl

我正在编写一个java工具,它需要检索diskpart返回的输出。使用带有指定脚本的/s选项调用Diskpart。我使用的是尽可能低的UAC设置的Windows7

ProcessBuilder=newprocessbuilder(“cmd.exe”、“/c”、“diskpart”、“/s”、“c:\\dps.txt”);
进程p=builder.start();
p、 waitFor();
InputStream ins=p.getInputStream();
System.out.println(ins.available());//输出:0
使用以下行而不是上面的行生成一个空输出文件c:\dps\u out.txt

ProcessBuilder=newprocessbuilder(“cmd.exe”、“/c”、“diskpart”、“/s”、“c:\\dps.txt”、“>>”、“c:\\dps\u out.txt”);
使用此方法调用diskpart时,似乎无法从标准输出读取任何内容,因为Process.getInputStream()和Windows输出重定向都访问标准输出,并且无法读取数据

直接调用diskpart需要提升

ProcessBuilder=newprocessbuilder(“diskpart”、“/s”、“c:\\dps”、“>>”、“c:\\dps\u out”);
线程“main”java.io.IOException中的异常:无法运行程序“diskpart”:CreateProcess error=740,请求的操作需要提升。
如何正确运行diskpart脚本并从java工具中读取其输出?

您的问题是什么

这是来自DiskPart的清单

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


Cmd不需要管理员访问权限,因此可以正常工作(它被设置为
AsInvoker
)。由于清单-
requireAdministrator

的原因,调用DiskPart direct将无法工作。如何正确运行DiskPart脚本并从java工具中读取其输出?提升到管理状态。除非您是管理员,否则Diskpart不会运行。请参见
wmic分区获取/format:CSV
。Wmic需要管理员在机器上运行一次,然后任何用户都可以运行它来做他们允许做的事情,通常他们可以读取任何内容。