命令路径中的Java exec和环境变量

时间:2014-05-14 14:48:11

标签: java environment-variables

我尝试在命令字符串中使用带有环境变量的Runtime.exec()执行参数化命令。

示例:

  String cmd = "%ProgramFiles%\\Internet Explorer\\iexplore.exe";
  Runtime.getRuntime().exec(cmd);

我收到以下错误:

java.io.IOException: Cannot run program "%ProgramFiles%\Internet": CreateProcess error=2, Le fichier spécifié est introuvable
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:369)
    at TestEnv.main(TestEnv.java:34)
Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
    at java.lang.ProcessImpl.start(ProcessImpl.java:30)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
    ... 4 more

在命令中没有环境变量它可以工作并启动IE:

  String cmd = "C:\\Program Files\\Internet Explorer\\iexplore.exe";
  Runtime.getRuntime().exec(cmd);

我检查了ProgramFiles变量是否存在:

  String path = System.getenv("ProgramFiles");
  System.out.println(path);

返回C:\ Program Files

我试图手动输入变量,同样的错误:

  Runtime.getRuntime().exec(cmd, new String[] {"ProgramFiles=C:\\Program Files"});

我尝试使用ProcessBuilder,同样的错误:

  ProcessBuilder pb = new ProcessBuilder(cmd);
  pb.start();

这样做的好方法是,有可能吗?

2 个答案:

答案 0 :(得分:0)

我无法直接谈论Windows,但是exec直接查找命令路径并尝试运行它。将env变量放在路径中并没有帮助,因为它是处理env变量的shell,而不是exec。

由于JRE非常模仿Unix操作系统,通常会使用两个arg exec,其中一个args是env vars。但是java没有选择启用该路由。

所以我的建议是将vars直接放入JVM环境中,然后执行命令。

或者更多的窗口,有人会跟随这篇文章。

答案 1 :(得分:0)

使用它来获取值

String ProgramFiles = System.getenv("ProgramFiles");

然后将其连接到命令

String cmd = ProgramFiles + "\\Internet Explorer\\iexplore.exe";