簡體   English   中英

如何在Windows上的Java中持久定義環境變量?

[英]How do I persistently define environment variables in Java on Windows?

有沒有辦法使用Java更改Windows環境變量? 我嘗試使用cmd函數set

Process exec = Runtime.getRuntime().exec(new String[] {
      "cmd", "/c", "set", "HTTP_PROXY=" + PROXY_URL
});

if (exec.waitFor() != 0) {
    throw new IllegalStateException("Output: "
        + getText(exec.getInputStream())
        + "Error: " + getText(exec.getErrorStream()
        + "\n"
        + "Exit value: " + exec.exitValue());
}

這段代碼運行正常,沒有任何錯誤,但是當我以后檢查系統變量時,沒有任何改變。

我正在嘗試更新HTTP_PROXY以便在HTTP代理后面運行的其他軟件可以使用它。

在由名稱/值對組成的環境中啟動流程。 當程序寫入一個env變量時,它可以選擇使子進程可見該寫入,但是當您檢查該值時,很可能使用了無法訪問Java環境的另一個進程(可能通過cmd.exe運行)。程序。

我不知道您的代碼的目的是否是以持久的方式定義環境變量,但是如果是這樣的話,那么如果沒有特定的OS工具和平台無關的方式,就無法在Java中完成。

環境變量的默認值必須由系統工具存儲在由相同的系統工具從中讀取的地方。 在Linux上,用戶主目錄中有.profile.bashrc類的文件,而在Windows上,則具有注冊表。 例如,在Windows 7上,我具有:我的PATH默認值存儲在\\HKEY_CURRENT_USER\\Environment -因此,您必須找到一種寫入系統注冊表的方法,例如reg命令

REG ADD命令允許用戶向注冊表添加新的鍵和值。 要顯示可以使用的完整參數范圍,請在命令行中鍵入以下內容: reg add /?

要在遠程計算機PC2上添加密鑰HKLM\\Software\\MyNewApp ,請鍵入:

 REG ADD \\\\PC2\\HKLM\\Software\\MyNewApp 

要將注冊表項添加到HKLM\\Software\\MyNewApp ,其值名為Data的類型為REG_BINARY ,數據為fe340ead ,請輸入:

 REG ADD HKLM\\Software\\MyNewApp /v Data /t REG_BINARY /d fe340ead 

您可以編寫.bat腳本,也可以從Java程序調用reg 您可能需要管理員權限並重新啟動某些程序(最終是整個計算機)才能使更新生效(例如,重新啟動explorer.exe)。

這樣做是不可能的(至少永遠如此)。 這樣做有充分的理由(隔離,Java工具會在不知不覺中更改您的環境)。 在此處查找黑客:

編輯:

raffaele給出了一個復雜的解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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