回答:
System.Environmentクラスを使用します。
メソッド
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
そして
System.Environment.SetEnvironmentVariable(variable, value [, Target])
あなたのために仕事をします。
オプションのパラメータは、Target
型の列挙でありEnvironmentVariableTarget
、それは次のいずれかとすることができる:Machine
、Process
、またはUser
。省略した場合、デフォルトのターゲットは現在のプロセスです。
EnvironmentVariableTarget.Machine
管理者アクセスが必要ですか?
.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);
私にとっては魅力のように働きました。
これは、マシン設定である環境変数に対して機能します。ユーザーの場合は、代わりにユーザーに変更してください。
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
代わりに使用してください。
以下を使用して環境変数を更新できます
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);