Programmazione Java: chiama un exe da Java e passa i parametri


87

Sto scoprendo un meccanismo per chiamare un exe da Java e passare parametri specifici. Come posso fare?

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

Il codice precedente funziona. Ma non sono in grado di trasmettere parametri . MyExe.exe accetta i parametri. Un altro problema è quando PathToExe ha spazi vuoti. ProcessBuilder sembra non funzionare. Per esempio:

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

Grazie.


1
nuovo ProcessBuilder ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
principe John Wesley


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();Questo frammento è utile per gli argomenti delle opzioni? Ad esempio -h che sta per aiuto e così via ..
Lorenzo B

che dire dei percorsi con spazi vuoti? Grazie ancora. Molto utile!!
Lorenzo B

3
@Flex: un argomento è un argomento. Il significato dell'argomento dipende interamente dal programma in esecuzione. Un programma potrebbe interpretare -hcome un'opzione, un altro potrebbe interpretarlo come un nome di file. ProcessBuilderné sa né si preoccupa. Ri percorsi con spazi: questo è uno dei motivi per cui gli argomenti vengono forniti come stringhe discrete piuttosto che come (diciamo) un elenco delimitato da spazi come sulla riga di comando e in alcune API scadenti. Getta spazi lì dentro con abbandono, l'intero percorso del programma verrà assegnato al sistema operativo da trattare come appropriato.
TJ Crowder

Risposte:




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
Dove mettere gli argomenti?
Mert Serimer

1
@Shikha, per favore, rispondi alla domanda
Anand j. Kadhi

0

Di seguito funziona per me se il tuo exe dipende da alcune dll o da determinate dipendenze, devi impostare il percorso della directory. Come menzionato di seguito, exePath significa cartella in cui exe è stato posizionato insieme ai suoi file di riferimento.

Applicazione exe che crea qualsiasi file temporaneo in modo che crei nella cartella menzionata in 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();
} 

**

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.