Чому мінна змінна середовища PATH відрізняється від командного рядка?


11

Трохи важливий фон: моя компанія має загальний скрипт VBS для входу, який вносить зміни в змінну середовища користувача PATH після входу в систему і дозволяє мені запускати програмне забезпечення, яке має залежність від відображених файлів файлів DFS. Нещодавно я встановив пакет SDK Windows Powershell на свою машину Windows 7 Enterprise і спробував спробувати змінити мінну змінну середовища PATH з командного рядка Powershell.

Після цього я помітив, що я більше не можу запускати програми, що відповідають цим модифікаціям PATH для входу в систему, і що редактор змінної середовища PATH був встановлений на щось інше, ніж те, що з'являлось, коли я видав 'echo %PATH%'командний рядок.

Так, наприклад (спрощення), з редактора змінної середовища ( My Computer properties -> Advanced System Settings -> Environment Variables) у мене був

 C:\MyDir\; C:\MyOtherDir

тоді як 'echo %PATH%'у командному рядку я отримав:

 C:\MyDir\

У когось іншого було подібне питання і чи було якесь рішення? Коли я звернувся за допомогою до Google, я натрапив на це:

(Пов’язано?) Thread StackOverflow

Мені прийшло в голову, що якщо скрипт входу був ініційований чимось іншим, ніж моїм середовищем Explorer.exe, тоді це була проблема. Однак, коли я сам запустив скрипт входу, мій PATH з командного рядка був незмінним. Що це стосується PowerShell? Мене не вистачає, як це пов'язано з цією установкою повністю.


Яким чином ви змінили шлях в powerhell? Де ви відлунювали% PATH%? У cmd.exe?
Вернер Гензе

ВІДПОВІДЬ НІЖ ГЕНІЙ.
SDsolar

Відповіді:


11

У Windows є два класи змінних середовища, змінні системного середовища та змінні середовища користувача . Якщо ви користуєтесь, echo %PATH%ви побачите змінну вашого середовища користувачаPATH . Тільки якщо не визначено змінну користувача, системна змінна діятиме для користувачів-процесів.

PATHСепаратор ;не повинен слідувати пробіл.

Наступна примітка Microsoft може бути корисною:

Ви можете змінити змінні середовища користувача, відредагувавши наступний ключ реєстру:

   HKEY_CURRENT_USER \ 
         Environment

Ви можете змінити змінні системного середовища, відредагувавши наступний ключ реєстру:

   HKEY_LOCAL_MACHINE \ 
               SYSTEM \ 
    CurrentControlSet \ 
              Control \ 
      Session Manager \ 
          Environment

Зауважте, що будь-яка змінна середовище, яку потрібно розширити (наприклад, під час використання %SYSTEM%), повинна зберігатися в реєстрі як REG_EXPAND_SZзначення реєстру. Будь-які значення типу REG_SZне будуть розширюватися при читанні з реєстру.

Додаткове зауваження: Щоразу, коли процес змінює своє оточення (а не параметри реєстру, які визначають середовище для нових процесів), зміни видно лише для дочірніх процесів.


1
Я хотів би підкреслити точку Акселя, якщо вам потрібно змінити екологічні змінні, то вам потрібно внести зміни в реєстр. Насправді я створив функцію PowerShell, щоб допомогти у цьому: computerperformance.co.uk/powershell/powershell_env_path.htm
Гай Томас

1
Не можна змінювати значення, лише дві змінні tmpта temp. Ви впевнені, що це шлях для користувача, який слід змінити?
Johnny_D

Це, здається, не працює (принаймні до перезавантаження). Змінна шлях відсутня у HKCU \ Environment, змінна шлях у cmd.exe відображається правильно, але запущені програми все ще бачать стару змінну шляху.
Мартін Арджерамі

@Martin: так, запущена програма не розпізнає зміни реєстру, оскільки вони отримують копію пам'яті середовища під час запуску програми. Ця копія залежить від батьківського процесу, який запускає підпроцеси. Якщо вони, наприклад, запущені з Провідника Windows, вам доведеться перезапустити Провідник, щоб отримати новий PATH.
Аксель Кемпер

Ти прибив це по голові! Шлях туди додавав деякі програми, які, як я знав, було видалено, наприклад Microsoft SQL. Я знав, що він не йде від встановленого мені шляху властивостей системи. Дуже дякую - від майбутнього - ви опублікували цю відповідь більше 3 років тому.
SDsolar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.