簡體   English   中英

命令路徑中的Java exec和環境變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM