Call an executable and pass parameters

JavaExeProcessbuilder

Java Problem Overview


I'm figuring out a mechanism to call an exe from Java and passing in specific parameters. How can I do?

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

The previous code works. But I'm not able to pass parameters in. MyExe.exe accepts parameters. An other problem is when PathToExe has blank spaces. ProcessBuilder seems not working. For example:

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

Thank you.

Java Solutions


Solution 1 - Java

Pass your arguments in constructor itself.

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

Solution 2 - Java

You're on the right track. The two constructors accept arguments, or you can specify them post-construction with ProcessBuilder#command(java.util.List) and ProcessBuilder#command(String...).

Solution 3 - Java

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

Solution 4 - Java

Below works for me if your exe depend on some dll or certain dependency then you need to set directory path. As mention below exePath mean folder where exe placed along with it's references files.

Exe application creating any temporaray file so it will create in folder mention 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();
} 

**

Solution 5 - Java

I built a utility for the same, very basic one.

    public class CallOsExeUtil {
            public static String call(String[] args) throws IOException, InterruptedException {
                    ProcessBuilder processBuilder = new ProcessBuilder(args);
                    Process process = processBuilder.start();
                    int waitFlag = process.waitFor();// Wait to finish application execution.
                    StringBuilder sb = new StringBuilder("");
                    if (waitFlag == 0) {
                            if (process.exitValue()==0) {
                                    System.out.println("This is me " + process.info());

                                    BufferedInputStream in = (BufferedInputStream) process.getInputStream();
                                    byte[] contents = new byte[1024];

                                    int bytesRead = 0;

                                    while ((bytesRead = in.read(contents)) != -1) {
                                            sb.append(new String(contents, 0, bytesRead));
                                    }
                            }

                    }
                    return sb.toString();
            }
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLorenzo BView Question on Stackoverflow
Solution 1 - JavaPrince John WesleyView Answer on Stackoverflow
Solution 2 - JavaT.J. CrowderView Answer on Stackoverflow
Solution 3 - JavaShikha ChauhanView Answer on Stackoverflow
Solution 4 - Javauser3124811View Answer on Stackoverflow
Solution 5 - JavaconnectoramView Answer on Stackoverflow