java - 如何在 Windows 上用 Java 持久定义环境变量?

标签 java environment-variables

有没有办法使用 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 named Data of type REG_BINARY and data of fe340ead, 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/

相关文章:

java - 如何在此代码中实现 OnItemClickListener?

java - 当抛出未经检查的异常时,异常处理程序是否有办法输出参数?

Java 数组列表 : contains() method returns false when arraylist contains the given object

node.js - 运行 npm run dev 时 env-cmd 路径错误

java - 在Linux中删除环境变量末尾的尾随bin/java

environment-variables - JQ在保存环境变量的同时添加单引号

秒表/计时器的 Java 控制台代码?

Java 邮件客户端无法在 Linux 上运行

ADT 和 Mac OS (10.8) 中的 Android NDK : Cannot run program "/ndk-build": Unknown reason Error: Program "/ndk-build" is not found in PATH

asp.net - Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) 在 ASP.Net 项目中返回空字符串