2017-10-16 46 views
7

Java 9 provied cách khá để có được thông tin của Process, nhưng tôi vẫn không biết làm thế nào để có được những CommandLine & arguments của quá trình:Làm thế nào để có được commandline & đối số của quá trình trong Java 9

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("")); 

Kết quả:

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

Nhưng tôi đang mong đợi:

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

Chỉ cần gỡ lỗi thêm, bạn có thể thử thay thế ProcessHandler 'p.toHandle()' bằng 'ProcessHandle.current()' và thực hiện để xem, nếu bạn nhận được một số giá trị trong trường dự kiến? Chủ yếu là quan tâm để xem nếu xử lý quá trình của quá trình hiện tại của bạn là thích hợp hay không. – nullpointer

+0

Không may mắn, vẫn như cũ. – Jerry06

Trả lời

1

Cố gắng sử dụng ProcessBuilder thay vì Runtime#exec()

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

Hoặc một cách khác để tạo ra một quá trình:

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

Đó là kết quả tương tự. Tôi đã thử nó trước khi thay đổi để Runtime.getRuntime() – Jerry06

+0

bạn đã thử lệnh tương tự như tôi đã đề cập? Hoặc 'Process p = Runtime.getRuntime(). Exec (" notepad.exe ", chuỗi mới [] {" E: \\ test.txt "});' –

+0

có, chỉ cần làm điều đó và kết quả tương tự. Nghĩ rằng đây là lỗi java 9 – Jerry06

5

Có vẻ điều này đã được báo cáo trong JDK-8176725. Đây là nhận xét mô tả vấn đề:

Đối số dòng lệnh không có sẵn thông qua API không đặc quyền cho các quy trình khác và do đó tùy chọn luôn trống. API rõ ràng là các giá trị là hệ điều hành cụ thể. Nếu trong tương lai, các đối số có sẵn bằng API cửa sổ, việc triển khai có thể được cập nhật.

BTW, cấu trúc thông tin được điền bằng mã gốc; các nhiệm vụ cho các trường không xuất hiện trong mã Java.

+0

Có, có vẻ như điều này đã hoạt động trên Linux, MacOS nhưng không có trong Cửa sổ bây giờ. – Jerry06

+0

Không chắc lắm về độ phân giải của lỗi đó, nhưng nó có vẻ như được đánh dấu sẽ được coi là * Dự án tương lai *. – nullpointer

Các vấn đề liên quan