有没有办法使用 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 运行)程序。
我不知道你的代码的目的是否是以持久的方式定义环境变量,但如果是这样的话,如果没有特定的操作系统工具并且以独立于平台的方式,就不能在 Java 中完成。
环境变量的默认值必须由系统工具存储在随后由同一个系统工具读取的位置。在 Linux 上,用户主目录中有 .profile
和 .bashrc
等文件,而在 Windows 上则有注册表。例如在我的 Windows 7 上我有:我的 PATH
默认值存储在 \HKEY_CURRENT_USER\Environment
- 所以你必须找到一种方法来写入系统注册表,例如命令 reg
The
REG ADD
command allows the user to add new keys and values to the Registry. To display the full range of parameters that can be used, type the following into the command line:reg add /?
To add the key
HKLM\Software\MyNewApp
on remote computer PC2, type:REG ADD \\PC2\HKLM\Software\MyNewApp
To add a registry entry to
HKLM\Software\MyNewApp
with a value namedData
of typeREG_BINARY
and data offe340ead
, type:REG ADD HKLM\Software\MyNewApp /v Data /t REG_BINARY /d fe340ead
您可以编写.bat
脚本或从您的Java 程序调用reg
。您可能需要管理员权限并重新启动一些程序(最终是整个机器)以使更新生效(例如重新启动explorer.exe)
关于java - 如何在 Windows 上用 Java 持久定义环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015748/