【问题标题】:Java: Run diskpart script and read outputJava:运行 diskpart 脚本并读取输出
【发布时间】: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


    【解决方案1】:

    你的问题是什么?

    这是来自 DiskPart 的清单。

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

    Cmd 不需要管理员权限,因此可以正常工作(设置为 AsInvoker)。由于清单 - requireAdministrator,直接调用 DiskPart 将不起作用。

    【讨论】:

    • 如何正确运行 diskpart 脚本并从 java 工具中读取其输出?
    • 提升为管理员状态。除非您是管理员,否则 Diskpart 不会运行。见wmic partition get /format:CSV。 Wmic 需要管理员在一台机器上运行一次,然后任何用户都可以运行它只做他们被允许做的事情,通常他们可以阅读任何内容。
    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2021-07-13
    • 2021-07-08
    • 1970-01-01
    • 2011-12-16
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多