3.環境変数 (5)起動時に有効になる環境変数 〜人生と環境変数は、順番が大事〜 【コマンドプロンプト、バッチファイルを使わなきゃならなくなった人向けのメモ】
Windows XP以降だと環境変数は、以下で設定できる。
setコマンドについては説明済み、
autoexec.batは、推奨しないので説明は省略。
システム環境変数とユーザ環境変数の違いについてざっくり説明する。
ユーザ環境変数は、サービスなどユーザがログインしてないくて
動作しているプロセスにも有効になる。
ユーザ環境変数は、ログインしてから起動するプロセスに対して有効になる。
では、同じ環境変数名で異なる値が設定されていたらどうなるか?
実験
結果
環境変数名 | サービス(*1)での値 | アプリケーション(*2)での値 |
TEST_OVERWRITE | SYSTEM | USER |
TEST_ADD | SYSTEM | SYSTEM;USER |
注意事項
起動したままのプロセスには有効にならない。
分かっているつもりでも結構以下ではまる。
サービス
サービスは、システム環境変数に変更して、サービスを再起動しても有効にならなず、
OS起動時のシステム環境変数のままのものもある。
サービスは、サービスマネージャー(service.exe)から起動される。サービスマネージャーは
起動したままであり、OS起動時のシステム環境変数のままであるからである。
(サービスプログラムの中で起動環境変数を取得して、新たに設定して子プロセスを起動してれば問題ない)
サービスの環境変数は、いつのものが有効になっているかが分かりにくい。
TEMP、TMPなどは、システム環境変数とユーザ環境変数で値が異なる。
いつのどの環境変数が有効になっているかProcess Walker、Process Explorerなどのツールを
使って確認したほうがいいだろう。