web-dev-qa-db-ja.com

PATHへの変更が認識されないのはなぜですか?

組み込みの環境変数ダイアログまたは Path Editor のようなものを使用してPATHを更新し、コマンドプロンプトを開くと、PATHへの変更がコンソールに登録されませんコマンドプロンプトがどこから開始されたかによって異なります。

たとえば、PATHを編集してから、スタートメニューまたはデスクトップのショートカットからcmd.exeを起動すると、PATHは問題なく表示されます。ただし、スタートメニューまたはデスクトップ以外の場所otherのショートカットからcmd.exeを起動すると、新しいPATHが読み取られず、代わりに古いパスが取得されます。それは非常に奇妙です。

デスクトップのショートカットからコマンドプロンプトを実行してみましたが、正常に動作しました。次に、そのまったく同じショートカットをデスクトップのサブフォルダーにコピーすると、更新されていないPATH問題が発生します。

これを説明するのは非常に難しいことに気付いたので、この問題を実際に表示するために スクリーンキャストを作成しました

このスクリーンキャストに表示されているコマンドプロンプトショートカットのスクリーンショットを次に示します。

Command Prompt shortcut settings

これはWindows Vista Home Premium SP2にあります。

39
Charles Roper

Rowlandが示唆するように、新しいプロセスを開始すると、それを開始しているプロセスから環境変数を読み取ります。したがって、スタートメニューまたはデスクトップからコマンドプロンプトを開始する場合)、それは_Explorer.exe_から環境変数を読み取ります。これは、重大度が示唆するように、レジストリの環境設定の変更を検出します。したがって、デスクトップまたはスタートメニューから起動したコマンドプロンプトに新しいPATHが表示されます。

投稿したスクリーンキャストにPATHの更新が表示されないのは、最初に [〜#〜] farr [〜#〜] を使用してエクスプローラウィンドウを起動したため、_FindAndRunRobot.exe_親プロセス。 FARRは環境の変化を自動的に検出しないため、そこから生成された子プロセスは新しいPATHを取得しません。また、エクスプローラで「Launch folder windows in a別のプロセス」オプションを設定しました。つまり、すべてのExplorer.exe FARRによって開かれた最初のウィンドウの後に開いたウィンドウ。ここでもFARRの子です。

別のプロセスでフォルダーウィンドウを起動する」オプションをオフにすると、新しい_Explorer.exe_プロセスがFARRで作成されず、解決します私の問題。ただし、コンソールウィンドウやその他のものもFARRから直接起動します。これらも古い環境設定を取得します。 FARRを再起動すると、新しい環境設定が反映されます。

以下は、FARRから生成されたプロセスを示すProcess Explorerのスクリーンショットです。これらのプロセスは、FARRを再起動しない限り、トップレベルの_Explorer.exe_から新しい環境設定を受け取りません。

process Explorer

29
Charles Roper

新しいプロセス(新しいコマンドラインなど)を開始すると、プロセスを開始しているプロセスから環境変数が取得されます。パスが更新されると、更新を実行するプロセスのみがパスが変更されたことを知ることができ、設定はユーザーが再度ログオンするか、システム全体の設定を再起動するまで反映されません。

32
Rowland Shaw