[原]java執行時修改系統環境變數
阿新 • • 發佈:2019-01-09
專案需要在程式執行時修改系統的環境變數,並在結束時還原。
Java執行時可以用System.getEnv(“{EnvName}”)的方法獲得系統環境變數,比如PATH。
但是,Java 6.0沒有setEnv方法,查詢API文件得知Java 8.0也沒有setEnv方法.
方案一:
通過Java IO修改 ~/.bashrc(Linux), /etc/bashrc(Mac OS X)。並用
Runtime.getRuntime.exec("source bashrc")
命令執行bashrc檔案。
結果失敗
原因是執行bashrc後,當前程式的環境變數還是當前程式啟動時的環境變數,並沒有變化。即使通過Process p = new ProcessBuild("java","{another xxx.class}").start();
新建一個java子程序,仍然繼承當前程式啟動時的環境變數,而不是執行bashrc後的變數。
方案二:
c++的 import <stdlib.h>
的setenv(“{Name}={Value}”)函式設定系統環境變數PATH。這個修改對且僅對當前程序生效,這正是專案需要的。
用java寫一個介面檔案, 並用javah生成c++的.h檔案。
生成dll動態連結庫檔案,匯入java專案。
結果成功
最後感嘆,和系統打交道,Java還是弱了一點.