3

Я только что установил gvim в своей системе Windows (в любом случае он находится на C:\gvim). Затем я добавляю C:\gvim\vim73\ в пользовательский PATH, а не в системный PATH. После этого я попытался вызвать vim из командной строки. Нет, это не сработало. Поэтому я удалил каталог gvim из пользовательского PATH в системный PATH. Это сработало.

Мне все еще любопытно, поэтому я делаю "echo% PATH%", и в результате получается все из системного PATH.

Насколько я понимаю, системная переменная PATH имеет более высокий приоритет, чем пользовательская, поэтому Windows сначала попытается найти системную переменную PATH, а затем пользователей. Так что это должно было сработать, но это не сработало.

1 ответ1

8

Вы на самом деле не устанавливаете переменные среды любой формы при изменении реестра.

Переменные среды не хранятся в реестре. В реестре хранится шаблон, из которого такие программы, как Windows Explorer, (заново) создают свои переменные среды, когда получают уведомление об этом. Фактические переменные среды являются для каждого процесса и хранятся в собственном адресном пространстве каждого процесса, первоначально наследуемого от его родительского процесса и впоследствии модифицируемого по прихоти процесса. Такие программы, как Windows Explorer, участвуют в добровольном протоколе, в соответствии с которым они будут перечитывать шаблон и обновлять свою среду для каждого процесса всякий раз, когда сообщение Windows транслируется во все окна верхнего уровня на рабочем столе.

Многие программы Win32 не участвуют в этом добровольном протоколе. Интерпретатор команд Microsoft - одна из таких программ. Чтобы изменить переменную среды в работающем процессе интерпретатора команд Microsoft, можно использовать обычные команды интерпретатора команд для изменения переменных среды, таких как SET , DPATH и PATH . Измененная среда будет наследоваться каждым процессом, который запускает интерпретатор команд.

Аналогичным образом, измененная среда в процессе проводника Windows наследуется только процессами, которые создаются проводником Windows после получения сообщения и повторного чтения шаблона. На переменные среды уже запущенного процесса не влияют изменения, внесенные другими процессами в их собственные переменные среды. Уже работающий интерпретатор команд Microsoft волшебным образом не получит измененную среду от процесса Windows Explorer, который породил его до изменения.

Другие командные интерпретаторы отличаются. Например, TCC компании JP Software сама участвует в добровольном протоколе. Он распознает сообщение Windows и обновит свою собственную среду для процесса из шаблона в реестре, если включен параметр "Обновление среды при изменении системы" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .