2013-02-26 3 views
0

То, что он говорит. Я могу установить переменные среды для каждого пользователя, либо из Windows> введите «Путь», либо используя RegEdit, или даже из сценария Python.Можно ли перезагрузить (Windows) переменные среды?

Но если я запустил приложение (например, из Launchy или запустил его из Chrome), он не получит новые переменные. Я должен начать новый cmd или проводник Windows (я думаю), чтобы получить новые значения.

Теперь, очевидно, я могу установить их для каждого использования, но я хочу установить их глобально для своей учетной записи, а также для любого процесса, который я использую в то время. Это возможно? И возможно ли (или проще) сделать из сценария Python?

+0

Взгляните на [этот вопрос] (http://stackoverflow.com/questions/205064/is-there-a-way-to-change-another-processs-environment-variables). Речь идет о Unix, но есть комментарий, говорящий, что он работает в Windows с cygwin. Если это так, вы можете сделать это с помощью любого отладчика. – rodrigo

+0

@rodrigo Это очень мило, но похоже, что он работает только с процессами, запущенными с cygwin. В соответствии с документацией Windows, которую я видел, они не позволяют вам управлять другими процессами, а только передавать сообщения, которые другое приложение затем отвечает за прослушивание/ответ. Ба! –

+0

Один из комментариев говорит: «Он даже работает в Windows с использованием cygwin, для процессов, которые не скомпилированы с помощью cygwin!». Я предполагаю, что вы можете сделать то, что хотите _simply_, запустив удаленный поток, который вызывает 'putenv()' (или 'SetEnvironmentVariable()') с соответствующими аргументами. И это именно то, что делает отладчик. Вы можете мыслимо написать инструмент, который делает это, но не в Python! – rodrigo

ответ

2

Если вы установили переменную окружения в реестр (или через интерфейс «Свойства системы»> «Дополнительно»> «Переменные окружения»), она будет глобальной и постоянной для каждого процесса, запущенного из контекста верхнего уровня, созданного после установки переменной. Оболочки и контексты, инициализированные до вашего изменения, не будут получать эти изменения, если вы явно не объедините значения из реестра с существующими значениями в этом контексте. Каждый контекст наследует среду своего родителя, но после этого изменения в родительскую или дочернюю среду не распространяются в любом направлении. Контексты, созданные на верхнем уровне, получают свою среду из реестра.

+0

Есть ли список/сайт в любом месте, где содержатся различные методы, которые создают ** новые ** контексты? И есть ли способ инициировать создание нового контекста из какого-то другого контекста? –

Смежные вопросы