web-dev-qa-db-ja.com

C#設定環境変数

C#を使用した環境変数の設定に問題があります。

状況によっては、いくつかの環境変数を変更する必要があります。たとえば、NDSRC変数を変更する必要があります。

私が使う:

Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine);

これは正常に動作します。

次に、変数を使用するスクリプトを実行します。スクリプトには変数が表示されないため、問題が発生します。

例:パス変数を設定します(最後にディレクトリを追加します)。

string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\";
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine);

Windowsコマンドラインを開きます([スタート]-> [実行]-> [cmd.exe])。

コマンドラインにcmdと入力します

システムはcmd.exeを見つけることができません: 'cmd'は、内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。

Windowsの設定->環境変数を確認すると、パスが新しい値に正しく設定されています。開いたコマンドプロンプトをチェックインすると、それも設定されます。

15

残念ながら、環境変数を更新する前にプロセスを再起動する必要があります。これを見てください MSDN post

7
Steve Danner

変数は、プロセスの開始時に継承され、その後は修正されたままになるように設計されています。

ただし、関連するレジストリキーを定期的に読み取って、そこからプロセスの環境変数を手動で更新できないだけの理由はありません。実際、最新の値を使用している場合、これは 正しいこと です。

基本的に、レジストリには環境変数のtemplateが格納されます。これは、「Windowsの設定->環境変数」で編集します。これを行うと、Windowsはすべての関係者にメッセージをブロードキャストします。そのような関係者は、レジストリから環境変数のコピーを再作成できます。

ただし、この再作成を実行するために呼び出すことができる既製の関数については知りません。そのため、おそらく独自の関数を作成する必要があります。

2
Roman Starkov