java getenv Windows系统环境variables

我有一个使用System.getenv(“MY_VAR”)获取系统环境variables的JAVA应用程序。 有没有办法只searchWindows系统环境variables而不是用户环境variables类似于我们可以将环境variables目标传递到C#Environment.GetEnvironmentVariable()方法? 任何帮助,将不胜感激。 谢谢!

在Java中没有办法做到这一点,至少不是在本地(见下文)。

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

现在,如果你真的绝望了,你可以像C#那样从Windows注册表中读取值。 问题是Java不能直接访问注册表,只能通过Preferences API访问有限的注册表键值子集。 为了完全访问你需要使用JNI。

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

这里要指出的一点是,C#不是通过实际的环境块来访问这些信息,而是通过直接读取系统设置来访问这些信息,这是Java本身无法实现的。

当你的进程接收到这个环境的时候,它已经被合并成了一个键/值对的列表。 分离到系统和用户变量是一个Windows的微妙,不传播到程序…除非你编写不可移植的代码来直接读取Windows注册表。