Java编程:从Java调用exe并传递参数


87

我正在寻找一种从Java调用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
洛伦佐乙

带空格的路径呢?再次感谢你。很有帮助!!
Lorenzo B

3
@Flex:参数是参数。参数的含义完全取决于正在运行的程序。一个程序可以解释-h为一个选项,另一个程序可以解释为文件名。ProcessBuilder既不知道也不在乎。重新使用空格进行路径:这是将参数作为离散字符串而不是(例如)以空格分隔的列表(如命令行和某些较差的API)中的形式给出的原因之一。放弃那里的空格,整个程序路径将交给OS酌情处理。
TJ Crowder

Answers:




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 '18年

1
@Shikha请回答问题
Anand j。Kadhi

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

**

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.