[英]Java exec and environment variable in command path
我尝试使用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();
这样做的好方法是什么,有可能吗?
我不能直接谈论Windows,但是exec是直接查找命令路径并尝试运行它。 将env vars放在路径中并没有帮助,因为它是处理env vars的外壳,而不是exec。
由于JRE紧密模仿Unix OS,因此通常可以使用两个arg exec,其中一个args为env vars。 但是java没有选择启用该路由。
因此,我的建议是将vars直接放入JVM env,然后执行命令。
或其他人可以跟进该帖子的更多窗口。
用它来获得价值
String ProgramFiles = System.getenv("ProgramFiles");
然后将其连接到命令
String cmd = ProgramFiles + "\\Internet Explorer\\iexplore.exe";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.