java getenv Windows系统环境变量

标签 java windows environment-variables

我有一个 JAVA 应用程序,它使用 System.getenv("MY_VAR") 获取系统环境变量。有没有办法只搜索 Windows 系统环境变量而不搜索用户环境变量,类似于我们如何将环境变量目标传递到 C# Environment.GetEnvironmentVariable() 方法?任何帮助,将不胜感激。谢谢!

最佳答案

在 Java 中无法做到这一点,至少在 native 中无法做到这一点(见下文)。

Windows 合并系统和用户环境变量,并将合并的环境传递给应用程序,但不提供有关每个特定变量来自何处的信息。 C# 可以做到这一点,因为 C# 不是通过访问进程的环境来做到这一点,而是直接访问注册表中的系统环境配置。因此,它可以做出这种区分。 Java 只允许您直接访问 C# 中的 Process 环境目标。

现在,如果您真的很绝望,您可以从 Windows 注册表 just as C# does 读取值。 。问题是 Java 不提供对注册表的直接访问,您只能通过 Preferences API 访问注册表项的有限子集。要获得完全访问权限,您需要使用 JNI。

有一个 JNI 注册表库位于 http://www.trustice.com/java/jnireg/ 。您可以使用它来读取 C# 使用的相同注册表项并访问相同的数据。

这里最重要的一点是,C# 不是通过实际的环境 block ,而是通过直接读取系统设置来访问该信息,而 Java 本身无法做到这一点。

关于java getenv Windows系统环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243704/

相关文章:

windows - git stash 留下修改后的文件?

node.js - Node http-server 在 Windows 10 Ubuntu Bash 上不起作用

docker - 读取和编辑 YAML 的最简单且优化的方法

bash - 如何将docker客户端环境变量过滤到docker run命令中?

ssh - 为什么 SSH 远程命令获得的环境变量比手动运行时少?

java - 从整数列表的索引中打印字符串

Java URL 连接超时

在 Apple 电脑上进行 .Net 编程

java - 避免在 Java 8 stream reduce 方法中使用全局变量

java - 如何将仅获取选定的子实体与父实体连接起来