2

Всякий раз, когда я изменяю переменную среды (в Windows 7), я должен выйти и запустить командную строку. Это необходимо или изменения не отражены.
Есть ли какая-либо команда (или простой метод) для перезапуска командной строки в том же месте?

Обновление: оригинальное решение techie007 start cmd && exit ответило на мой вопрос буквально. Но это не решило мою проблему. Похоже, что нет простого метода. Я попробовал сценарии, приведенные в Переполнении стека. Сценарии сработали для меня, поэтому я отмечаю ответ techie007 как принятый.

2 ответа2

4

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

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

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

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

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

2

C:\> start cmd должен помочь открыть новое окно командной строки в текущей папке.

Вы также можете использовать C:\> start cmd && exit чтобы открыть новое приглашение CMD, а затем закрыть окно, из которого вы его запустили, если ему удалось открыть его успешно.

Используйте только один & чтобы закрыть окно запуска независимо от успеха.

редактировать: Теперь эта грация была достаточно хороша, чтобы указать, что я не понимал ... :)

Там (намеренно) нет никакого способа сделать это в Windows.

Этот вопрос также задавался о переполнении стека, и там есть несколько хороших объяснений и возможного обходного решения на основе сценариев:

Есть ли команда для обновления переменных среды из командной строки в Windows?

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