Esecuzione di un programma esterno con la variabile percorso impostata in Java?

Sto cercando di eseguire un programma esterno tramite la riga di comando, ma ho scoperto che sono in grado di farlo solo se il programma esiste nella directory da cui lo chiamo. Mi piacerebbe essere in grado di eseguire il programma da qualsiasi directory.

Ho impostato la variabile Path per windows (7) e sono in grado di eseguire il programma da qualsiasi directory manualmente con la riga di comando; tuttavia non sono in grado di farlo tramite Java.

Codice pertinente:

Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP}); 

Il mio problema è che l’output del programma sopra produce un file con nome generico “log.txt”. Ciò causerà problemi durante il threading del mio programma. Se è imansible utilizzare la variabile path, in alternativa è ansible copiare il programma nella nuova directory ed eliminarlo in seguito. Vorrei evitare di farlo.

Modifica: il codice sopra funziona come GetLog.exe risiede in C: \ AutomateKPI. Vorrei fare riferimento% PATH% così posso eseguire GetLog.exe da C: \ AutomateKPI \ * NewDir *

Prova a usare ProcessBuilder . Ti permette di specificare la directory di lavoro:

 String commandPath = "C:" + File.pathSeparator + AutomateKPI" + File.pathSeparator + "GetLog.exe"; ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP); pb.directory(new File("intendedWorkingDirectory")); Process p = pb.start(); 

Oppure, se C: \ AutomateKPI è nel %PATH% :

 ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP); 

Non è chiaro dai documenti, ma ProcessBuilder sembra individuare le cose in un modo simile al sistema, ad esempio utilizzando %PATH% su Windows.

Bene, se conosci il percorso del programma che stai aprendo e non devi usare cmd, questo dovrebbe funzionare ogni volta:

 File file = new File("File Directory"); Desktop dt = Desktop.getDesktop(); try { dt.open(file); } catch (IOException e1) { }