繁体   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