System.getenv("MY_VAR") を使用してシステム環境変数を取得する Java アプリケーションがあります。C# Environment.GetEnvironmentVariable() メソッドに環境変数ターゲットを渡す方法と同様に、ユーザー環境変数ではなく、Windows システム環境変数のみを検索する方法はありますか? どんな助けでも大歓迎です。ありがとう!
2 に答える
少なくともネイティブでは、Java でそれを行う方法はありません (以下を参照)。
Windows は、システム環境変数とユーザー環境変数をマージし、マージされた環境をアプリケーションに渡しますが、それぞれの特定の変数がどこから来たのかについての情報はありません。C# はプロセスの環境にアクセスするのではなく、レジストリ内のシステム環境構成に直接アクセスすることによってそれを行うため、C# はそれを行うことができます。したがって、それはその区別をすることができます。Process
Java は、C#の環境ターゲットに相当するものへの直接アクセスのみを提供します。
本当に必死なら、C# と同じように Windows レジストリから値を読み取ることができます。問題は、Java がレジストリに直接アクセスできないことですPreferences
。API を介してレジストリ キーの限られたサブセットにしかアクセスできません。フル アクセスするには、JNI を使用する必要があります。
http://www.trustice.com/java/jnireg/に JNI レジストリ ライブラリがあります。これを使用して、C# が使用するのと同じレジストリ キーを読み取り、同じデータにアクセスできます。
ここでの重要な点は、C# では、実際の環境ブロックを介してではなく、システム設定を直接読み取ることによって、その情報にアクセスできるということです。これは、Java がネイティブに行うことはできません。
プロセスが環境を受け取るまでに、すべてがキーと値のペアの 1 つのリストにマージされています。システム変数とユーザー変数への分離は、Windows レジストリを直接読み取るための移植性のないコードを記述しない限り、プログラムに伝播しない Windows のみの微妙な点です。