【发布时间】:2014-05-14 14:48:11
【问题描述】:
我尝试使用 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();
有什么好办法,可以吗?
【问题讨论】:
-
你为什么不直接做
String path = System.getenv("ProgramFiles"); String exe="iexplore.exe";Runtime.getRuntime().exec(path+"\\"+"exe");? -
获取 %PROGRAMFILES% 的值并将后半部分附加到路径
-
该命令在属性文件中定义并且是可修改的,因此我不能在这里使用连接。
标签: java environment-variables