как я могу изменить переменную среды path пользователя без выхода из системы?

<p>вопрос в значительной степени говорит обо всем; у меня есть пользователи, у которых нет прав на редактирование их собственной переменной среды <code>path</code>, и если им по какой-то причине необходимо изменить ее, им необходимо выйти, чтобы администратор мог войти и изменить <code>path</code> для них, прежде чем пользователь снова войдет в систему. это не идеально. можно ли сделать это лучше?</p>

<p>вы всегда можете вызвать командную консоль с правами администратора (или любым другим методом runas) и использовать такой инструмент, как <a href="http://www.ss64.com/nt/setx.html"> setx </a> , чтобы навсегда изменить путь. существующие оболочки и/или работающие программы, вероятно, будут использовать старый путь, но любая новая оболочка/программа будет использовать новые настройки.</p>

<p>для учетных записей без прав администратора:</p><p>откройте "учетные записи пользователей" и выберите "изменить переменные среды" ( <a href="http://support.microsoft.com/kb/931715">http://support.microsoft.com/kb/931715</a> ).</p><p>этот диалог покажет вам ваши текущие пользовательские переменные, а также системные переменные. возможно, вам придется добавить локальную переменную path, если вы еще этого не сделали.</p><p>чтобы обновить путь к каталогу python 3.3, нажмите new:</p><p>имя переменной: path значение переменной:% path%; c:\python33</p><p>это создает локальный path, беря текущий системный path и добавляя к нему.</p>

<p>мой компьютер/свойства/дополнительно/переменные среды. изменения вступают в силу немедленно <strong>кроме</strong> для уже открытых окон командной строки. нет необходимости выходить из системы и входить обратно.</p><p><strong>примечание:</strong> если у вас нет доступа к этому окну, вы можете получить его, запустив <code>rundll32 sysdm.cpl,editenvironmentvariables</code> из окна запуска или командной строки.</p>

<p>в командной строке вы можете сделать:</p><pre><code>set path=c:\somedir;%path% </code></pre><p>но это только изменяет его для командной строки (и любых приложений, запускаемых из командной строки). предполагая, что вы хотите, чтобы это применялось ко всему, что пользователь делает, вы меняете переменные среды пользователя. щелкните правой кнопкой мыши мой компьютер, свойства, дополнительно, переменные среды и в разделе "пользовательские переменные для добавления переменной:</p><pre><code>path = c:\whatever </code></pre><p>когда пользователь входит в систему, он добавляется к общесистемному пути.</p>

<p>пользователь может установить переменную path в командной строке, которая переопределит общесистемную переменную path, даже если у пользователя нет прав "администратор". изменение вступит в силу для новых процессов, которые пользователь запускает из этой командной строки. (существующий процесс explorer и любые другие процессы, выполняемые пользователем при внесении изменения, не будут "видеть" это изменение.)</p>

<p>в дополнение к ответам, приведенным выше, вы также можете обновить реестр (который имеет преимущество, заключающееся в возможности написания сценариев):</p><p>переменная path хранится в hkey\_current\_user\environment.</p><p>чтобы прочитать текущий путь:</p><pre><code>reg query hkey\_current\_user\environment /v path </code></pre><p>чтобы добавить значение c:\somedir к пути:</p><pre><code>reg add hkey\_current\_user\environment /v path /d "%path%;c:\somedir" </code></pre><p>обратите внимание, что при запуске процессы читают среду, поэтому вам придется перезапустить процесс, чтобы он получил новый путь.</p><p>обновление: я нашел еще один способ:</p><pre><code>rundll32 sysdm.cpl,editenvironmentvariables </code></pre><p>опять же, этот апплет редактирует реестр и имеет тот же эффект, что и выше.</p>