C#で環境変数を取得および設定するにはどうすればよいですか?


回答:


256

System.Environmentクラスを使用します

メソッド

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

そして

System.Environment.SetEnvironmentVariable(variable, value [, Target])

あなたのために仕事をします。

オプションのパラメータは、Target型の列挙でありEnvironmentVariableTarget、それは次のいずれかとすることができる:MachineProcess、またはUser。省略した場合、デフォルトのターゲットは現在のプロセスです。


37
オプションの3番目のパラメーターにも注意してください:System.Environment.SetEnvironmentVariable(variable、value、EnvironmentVariableTarget)可能な値は次のとおりです:MachineProcess、およびUser
Lessan Vaezi

1
EnvironmentVariableTarget.Machine管理者アクセスが必要ですか?
チェックサム

はい、そうです。なしで実行しようとすると、明らかな例外が発生します。
Erez A. Korn

30

.NETコンソールアプリでPATH環境変数を読み取るときにこれに遭遇し、System.Environment.GetEnvironmentVariableを使用すると、環境変数が自動的に展開されることがわかりました。

これが発生することを望んでいません...つまり、「%SystemRoot%\ system32」などのパスにあるフォルダが「C:\ Windows \ system32」に書き換えられていました。展開されていないパスを取得するには、これを使用する必要がありました。

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

私にとっては魅力のように働きました。


7
+1 Patrick Desjardinsが回答した別のソリューションでは管理者権限が必要なため、このソリューションを使用する必要がありました。このソリューションでは、管理者権限がなくても環境変数の値を読み取ることができました。
遠野ナム

@TonoNam Patrickの回答は、管理者権限なしで私のマシンで機能します。システム環境変数を設定するには、(もちろん)管理者権限が必要です。
フランクリンYu

16

取得して設定

取得する

string getEnv = Environment.GetEnvironmentVariable("envVar");

セットする

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);

14

これは、マシン設定である環境変数に対して機能します。ユーザーの場合は、代わりにユーザーに変更してください。

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);


0

以下を使用して環境変数を更新できます

string EnvPath = System.Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) ?? string.Empty;
if (!string.IsNullOrEmpty(EnvPath) && !EnvPath .EndsWith(";"))
    EnvPath = EnvPath + ';';
EnvPath = EnvPath + @"C:\Test";
Environment.SetEnvironmentVariable("PATH", EnvPath , EnvironmentVariableTarget.Machine);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.