我有一个JAVA应用程序,它使用System.getenv(“MY_VAR”)获取系统环境变量。有没有办法只搜索Windows系统环境变量而不是用户环境变量,类似于我们如何将环境变量目标传递到C#Environment.GetEnvironmentVariable()方法?任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
在Java中没有办法做到这一点,至少不是本地的(见下文)。
Windows合并系统和用户环境变量,并将合并后的环境传递给应用程序,没有关于每个特定变量来自何处的信息。 C#可以做到这一点,因为C#不是通过访问进程的环境,而是直接在注册表中访问系统环境配置。因此,它可以做出这种区分。 Java只允许您直接访问C#中等效的Process
环境目标。
现在,如果你真的很绝望,你可以从Windows注册表just as C# does中读取值。问题是Java不能直接访问注册表,您只能通过Preferences
API访问有限的注册表项子集。要获得完全访问权限,您需要使用JNI。
http://www.trustice.com/java/jnireg/处有一个JNI注册表库。您可以使用它来读取C#使用的相同注册表项并访问相同的数据。
这里的主要观点是,C#允许您不通过实际环境块访问该信息,而是通过直接读取系统设置,Java本身不能执行此操作。
答案 1 :(得分:0)
当您的流程收到环境时,它已全部合并为一个键/值对列表。分离到系统和用户变量是一个仅限Windows的微妙之处,它不会传播到程序......除非您编写非可移植代码直接读取Windows注册表。