जावा प्रोग्रामिंग: जावा और पासिंग पैरामीटर्स से एक exe कॉल करें


87

मैं जावा से एक exe कॉल करने और विशिष्ट मापदंडों में पारित करने के लिए एक तंत्र का पता लगा रहा हूं। मैं कैसे कर सकता हूँ?

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 ();
प्रिंस जॉन वेस्ले


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();क्या यह स्निपेट विकल्प तर्कों के लिए मूल्यवान है? उदाहरण के लिए -h कि मदद और इतने पर खड़ा है ..
लोरेंजो बी

रिक्त स्थानों के साथ रास्तों के बारे में क्या? फिर से धन्यवाद। बहुत मददगार!!
लोरेंजो B

3
@ फलेक्स: एक तर्क एक तर्क है। अर्थ तर्क की पूरी तरह से प्रोग्राम किया जा रहा है चलाने के लिए है। एक कार्यक्रम -hएक विकल्प के रूप में व्याख्या कर सकता है, दूसरा इसे फ़ाइल नाम के रूप में व्याख्या कर सकता है। ProcessBuilderन तो पता है और न ही परवाह है। रिक्त स्थान के साथ पुन: पथ: यह एक कारण है कि तर्कों को असतत तार के बजाय कमांड-लाइन पर और कुछ खराब एपीआई में एक अंतरिक्ष-सीमांकित सूची के रूप में दिया जाता है। परित्याग के साथ रिक्त स्थान फेंक दें, पूरे कार्यक्रम पथ को ओएस के रूप में उपयुक्त माना जाएगा।
टीजे क्राउडर

जवाबों:


119

कंस्ट्रक्टर में ही अपनी दलीलें पास करें।

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

क्या होगा अगर निष्पादन योग्य जार फ़ाइल के अंदर है?
t4d_


8

आप सही रास्ते पर हैं। दो कंस्ट्रक्टर्स तर्क स्वीकार करते हैं, या आप के साथ उन्हें बाद निर्माण निर्दिष्ट कर सकते हैं ProcessBuilder#command(java.util.List)और ProcessBuilder#command(String...)


स्पष्टीकरण के लिए: ProcessBuilder#command(java.util.List)और ProcessBuilder#command(String...)किसी भी मौजूदा कमांड को कंस्ट्रक्टर के माध्यम से निर्दिष्ट करें (जो कि डॉक्स से बहुत स्पष्ट नहीं है)।
स्नोज़्ज़लेबर्ट

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
अर्गल्स कहाँ रखें?
मर्ट सीरीमर

1
@ शिखा कृपया सवाल से गुज़रें
आनंद जी कढ़ी

0

नीचे मेरे लिए काम करता है यदि आपका एक्सई कुछ डीएल या कुछ निर्भरता पर निर्भर करता है तो आपको निर्देशिका पथ निर्धारित करने की आवश्यकता है। जैसा कि exePath माध्य फ़ोल्डर के नीचे उल्लेख किया गया है, जहां exe को संदर्भ फ़ाइलों के साथ रखा गया है।

किसी भी टेम्परेरी फ़ाइल को बनाने के लिए एक्साइज़ एप्लिकेशन को प्रोसेस प्रक्रिया में फ़ोल्डर उल्लेख में बनाएँ।

**

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

**

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.