有没有办法使用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代理后面运行的其他软件可以使用它。
答案 0 :(得分:4)
流程在由名称 - 值对组成的环境中启动。当程序写入env变量时,它可以选择使该写入对子进程可见,但是当您检查该值时,您可能正在使用另一个无法访问Java环境的进程(可能通过cmd.exe运行)程序
我不知道你的代码的目的是以持久的方式定义环境变量,但如果是这种情况,如果没有特定的OS工具并且不依赖于平台的方式,则无法在Java中完成。< / p>
环境变量默认值必须由系统工具存储在可以通过相同系统工具读取的位置。在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
的{{1}}和REG_BINARY
的数据,请输入:fe340ead
您可以编写REG ADD HKLM\Software\MyNewApp /v Data /t REG_BINARY /d fe340ead
脚本或从Java程序中调用.bat
。您可能需要管理员权限并重新启动某些程序(最终是整个计算机)才能使更新生效(例如,重新启动explorer.exe)
答案 1 :(得分:0)