- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从应用程序安装位置执行 .bat 文件,该文件仅包含来 self 的 java 程序的 SET 命令。
我尝试运行如下所示
ProcessBuilder pb = new ProcessBuilder("cmd", "/c","C:\\apps\\vars.bat");
pb.command("C:\\apps\\test.exe","-u=user1", "-p=pwd1");
pb.redirectErrorStream(true);
pb.redirectOutput(outputFile);
Process process = pb.start();
try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
process.getOutputStream().close();
InputStream is = process.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
下面是vars.bat内容
@rem Defined by Install. Please Do NOT Remove The Following Lines.
set VAR1=110002020150715
set DB_CONNECT=test
set DB_SERVER=localhost
set ORACLE_SID=test
set XML_ENCODING=ISO-8859-1
问题是 java 程序无法识别 .bat 文件中设置的任何环境变量。
vars.bat 和 test.exe 均来自应用程序安装位置。为了首先运行 test.exe,我需要运行 vars.bat,因为 exe 使用 .bat 文件中设置的变量来连接到应用程序
知道如何设置 .bat 文件中设置的环境变量以使用 ProcessBuilder 创建的进程。
最佳答案
ProcessBuilder 用于准备要启动的进程。 ProcessBuild 将只设置一个要执行的命令。当您使用command()时,它将设置/更改要执行的命令,因此您之前的命令将消失。请记住,您的“vars.bat”命令和“test.exe”程序都尚未执行。它只会在您调用 start()
方法时执行,此时您可以使用返回的 Process
对象。
要在“test.exe”文件之前运行“vars.bat”文件,您必须创建另一个将执行这两个命令的“bat”文件。这样它们将在相同的环境/shell/执行/容器/进程中运行。因此,创建一个包含以下内容的新“bat”文件:
vars.bat
test.exe -u=user1 -p=pwd1
以安装目录作为启动目录运行此“bat”文件,或使用这些文件的绝对路径。然后,您可以像之前一样使用 ProcessBuilder
和 Process
运行这个新的“bat”文件。
关于java - 如何为 ProcessBuilder 进程设置 .bat 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498375/
我是一名优秀的程序员,十分优秀!