如何在Java 9中获得ProcessLine和Process的参数

Java 9提供了获取Process信息的方法,但是我仍然不知道如何获取进程CommandLinearguments

 Process p = Runtime.getRuntime().exec("notepad.exe E:\\test.txt"); ProcessHandle.Info info = p.toHandle().info(); String[] arguments = info.arguments().orElse(new String[]{}); System.out.println("Arguments : " + arguments.length); System.out.println("Command : " + info.command().orElse("")); System.out.println("CommandLine : " + info.commandLine().orElse("")); 

结果:

 Arguments : 0 Command : C:\Windows\System32\notepad.exe CommandLine : 

但我期待:

 Arguments : 1 Command : C:\Windows\System32\notepad.exe CommandLine : C:\Windows\System32\notepad.exe E:\\test.txt 

看起来这是在JDK-8176725中报告的。 这里是描述问题的评论:

命令行参数不能通过非特权API用于其他进程,因此可选项总是空的。 API明确表示这些值是操作系统特定的。 如果将来,这些参数可以通过Window API获得,那么可以更新实现。

顺便说一下,信息结构是由本地代码填充; 这些字段的分配不会出现在Java代码中。

尝试使用ProcessBuilder而不是Runtime#exec()

 Process p = new ProcessBuilder("notepad.exe", "E:\\test.txt").start(); 

或者另一种方式来创建一个过程:

 Process p = Runtime.getRuntime().exec(new String[] {"notepad.exe", "E:\\test.txt"});