Java Programming: เรียก exe จาก Java และส่งผ่านพารามิเตอร์


87

ฉันกำลังหากลไกในการเรียก exe จาก Java และส่งผ่านพารามิเตอร์เฉพาะ ฉันจะทำอย่างไร?

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

System.out.printf("Output of running %s is:", Arrays.toString(args));

while ((line = br.readLine()) != null) {
  System.out.println(line);
}

รหัสก่อนหน้านี้ใช้งานได้ แต่ฉันไม่สามารถส่งผ่านพารามิเตอร์ใน . MyExe.exe ยอมรับพารามิเตอร์ ปัญหาอื่นคือเมื่อ PathToExe มีช่องว่าง ดูเหมือนว่า ProcessBuilder จะไม่ทำงาน ตัวอย่างเช่น:

C:\\User\\My applications\\MyExe.exe

ขอขอบคุณ.


1
ใหม่ ProcessBuilder ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
Prince John Wesley


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();ข้อมูลโค้ดนี้มีค่าสำหรับอาร์กิวเมนต์ตัวเลือกหรือไม่ เช่น -h ที่หมายถึงความช่วยเหลือเป็นต้น
Lorenzo B

แล้วเส้นทางที่มีช่องว่างล่ะ? ขอขอบคุณอีกครั้ง. มีประโยชน์มาก !!
Lorenzo B

3
@ เฟล็กซ์: อาร์กิวเมนต์คืออาร์กิวเมนต์ ความหมายของการโต้แย้งนี้ขึ้นอยู่กับโปรแกรมถูกเรียกใช้ โปรแกรมหนึ่งสามารถตีความ-hว่าเป็นตัวเลือกอื่นสามารถแปลเป็นชื่อไฟล์ได้ ProcessBuilderทั้งไม่รู้หรือใส่ใจ Re paths ที่มีช่องว่างนั่นเป็นสาเหตุหนึ่งที่ทำให้อาร์กิวเมนต์เป็นสตริงที่ไม่ต่อเนื่องแทนที่จะเป็น (พูด) รายการที่คั่นด้วยช่องว่างเช่นเดียวกับในบรรทัดคำสั่งและใน API ที่ไม่ดีบางตัว ทิ้งช่องว่างไว้ที่นั่นโดยละทิ้งเส้นทางของโปรแกรมทั้งหมดจะถูกมอบให้กับ OS เพื่อปฏิบัติตามความเหมาะสม
TJ Crowder

คำตอบ:


120

ส่งผ่านข้อโต้แย้งของคุณในตัวสร้างเอง

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();

จะเกิดอะไรขึ้นถ้าไฟล์ปฏิบัติการอยู่ในไฟล์ Jar?
t4d_

@ พวกกู. โปรดช่วยแก้ไขstackoverflow.com/questions/43050217/…
gstackoverflow

8

คุณมาถูกทางแล้ว สอง ก่อสร้างยอมรับข้อโต้แย้งหรือคุณสามารถระบุพวกเขาโพสต์การก่อสร้างที่มีและProcessBuilder#command(java.util.List)ProcessBuilder#command(String...)


เพื่อความชัดเจน: ProcessBuilder#command(java.util.List)และProcessBuilder#command(String...)เขียนคำสั่งที่มีอยู่ใด ๆ ที่ระบุผ่านตัวสร้าง (imho ที่ไม่ชัดเจนมากจากเอกสาร)
Snozzlebert

0
import java.io.IOException;
import java.lang.ProcessBuilder;

public class handlingexe {
    public static void main(String[] args) throws IOException {
        ProcessBuilder p = new ProcessBuilder();
        System.out.println("Started EXE");
        p.command("C:\\Users\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");   

        p.start();
        System.out.println("Started EXE"); 
    }
}

1
จะใส่ args ที่ไหน?
Mert Serimer

1
@ ชิข่าได้โปรดตอบคำถาม
อานันท์เจ. คาดี

0

ด้านล่างใช้งานได้สำหรับฉันหาก exe ของคุณขึ้นอยู่กับ dll หรือการพึ่งพาบางอย่างคุณต้องกำหนดเส้นทางไดเรกทอรี ตามที่ระบุไว้ด้านล่าง exePath หมายถึงโฟลเดอร์ที่ exe วางไว้พร้อมกับไฟล์อ้างอิง

แอปพลิเคชั่น exe สร้างไฟล์ temporaray ใด ๆ ดังนั้นมันจะสร้างในโฟลเดอร์ที่กล่าวถึงใน processBuilder.directory (... )

**

ProcessBuilder processBuilder = new ProcessBuilder(arguments);
processBuilder.redirectOutput(Redirect.PIPE);
processBuilder.directory(new File(exePath));
process = processBuilder.start();
int waitFlag = process.waitFor();// Wait to finish application execution.
if (waitFlag == 0) {
...
 int returnVal = process.exitValue();
} 

**

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.