Як додати змінну середовища Windows без перезавантаження?


181

Я хотів би додати змінну оточуючого середовища до машини Windows (настільний ПК або сервер) і мати змогу використовувати її без перезавантаження цієї машини.

Скажімо, у вас є виробничий сервер, на якому розміщені різноманітні програми, а новому додатку потрібна певна змінна середовище для запуску. Ви не хочете перезавантажувати його, поки користувачі підключаються до інших ваших додатків. Які у вас варіанти? Мені не подобається варіант очікування до хорошого перезавантаження. Має бути кращий спосіб. Що я пропускаю?


2
У мене був цей самий випуск. Я десь читав, що вбивство explor.exe буде оновити змінні, і воно спрацювало. Тоді мені просто довелося запустити провідник від менеджера завдань.
user19694

1
Вам потрібно закрити командний рядок та знову відкрити його, щоб змінні вашого шляху оновлювалися. Змінні завантажуються при запуску cmd.
NiLInfinite

Відповіді:


162

Зміни змінних середовища повинні набути чинності негайно, якщо ви внесете зміни через головне діалогове вікно властивостей для відповідного комп'ютера (перейдіть до розділу Мій комп'ютер | Властивості | Додаткові | Змінні середовища). Після збереження змін Провідник передає WM_SETTINGCHANGEповідомлення усім вікнам, щоб повідомити про зміни. Будь-які програми, породжені через Explorer після цього, повинні отримати оновлене середовище, хоча вже запущені програми не будуть, якщо вони не обробляють повідомлення про зміну налаштувань.

Я не можу сказати з опису вашої проблеми, яку конкретну проблему у вас виникає з цим. Чи можете ви розповісти більше про конкретний сценарій, який не працює?

Ця стаття KB також може бути корисною: Як розповсюджувати змінні середовища в системі


2
Гаразд, я, мабуть, бачив таку поведінку на службі, що працює, або щось подібне. Я додав нову змінну середовища, використовуючи описаний вище метод. Тоді я зміг побачити значення після відкриття нового командного рядка та використання команди "echo% <myvar>%. Дякую обом за відповіді.
Чад Браун-Дуйн

5
Для користувачів PowerShell цей фрагмент може бути корисним
Anders Zommarin

8
Якщо використовується cmd, вам потрібно перезапустити його, якщо змінити змінну env
Ніл МакГуйган

4
Щойно встановлено Scala на моєму ПК, але PATH не оновлювався; імовірно, MSI не транслював повідомлення WM_SETTINGCHANGE. Я додав фіктивну змінну SYSTEM, тобто CHANGE_TO_UPDATE = z, яку я оновлюю, щоб викликати повідомлення WM_SETTINGCHANGE - проблема вирішена
Даррен Бішоп

3
404 за посиланням :-(
Самот

63
  1. У командному рядку введіть: runas /user:yourusername@yourdomain cmd
  2. Він відкриє новий cmd-рядок, а потім введіть: taskkill /f /im explorer.exe
  3. Потім введіть: explorer.exe

Тепер, закривши всі командні підказки, ви побачите, що PATHзмінна справді оновлена.

Усі командні підказки повинні бути закриті. Повторно відкрийте новий командний рядок, введіть шлях, і ви побачите нові дані.


6
Із усіх відповідей на цій сторінці це єдиний, який насправді працював на мене. Дякую!!
coredumperror

2
Це працювало для мене. Я думаю, що проблема полягає в тому, що якщо ви запускаєте cmd через Explorer (щоб заощадити, що вам потрібно буде набирати довгі шляхи), то Explorer ніколи не закриється, навіть якщо ви закриєте всі windows Explorer. Дякую за рішення :)
Стів Мак

Працювали для мене. Ви також можете просто скористатися диспетчером завдань, щоб знищити завдання провідника та перезапустити його (Файл> Запустити нове завдання).
адабірон

7
Ага. Будь ласка, не вбивайте Провідник Windows, якщо один з його процесів не буде вивішений. Замість цього відкрийте діалогове вікно вимкнення і скасуйте його, утримуючи його ctrl+alt+shift. Це чисто вийде з програми Windows Explorer. У Vista + діалогове вікно відключення важче знайти (але все-таки присутнє, принаймні через 7 (не впевнені близько 8 і 10)), тому існує другий метод. ctrl + shift + клацніть правою кнопкою миші в порожній частині меню «Пуск» та виберіть «Провідник виходу». У 8 варіант виходу такий же, але ви використовуєте панель завдань, а не меню запуску.
Кевін Кеткарт

1
+1 Це працює як шарм для Windows 7. FYI, я просто використав CTRL + ALT + SHIFT, і з диспетчера завдань Windows я вбив увесь процес Explorerr.exe, а потім запустив його знову, натиснувши кнопку Нова задача .
Марко Демайо

19

Слід пам’ятати, що багато програм отримують екологічні змінні під час їх першого запуску, тому, хоча Windows може не потребувати перезавантаження, деякі програми можуть, перш ніж вони зможуть використовувати нові змінні. Хорошим прикладом цього є відкриття нового вікна командного рядка після додавання PATH (так, мене це спричинило).


3
Ця проблема впливає на ВСІ ПОСЛУГИ, навіть перезапущена служба не побачить нових змінних середовища.
gimel

1
Ви впевнені, що це не через обмін процесом svchost?
Марк Совул

16

Хоча мені не вистачає репутації, щоб коментувати найвищу відповідь на це питання, я хотів би зазначити, що це не зовсім коректно. Я це знаю, тому що незалежно від того, який шлях я намагався на цій посаді, насправді нічого не вийшло.

Стаття kb, пов’язана у цій відповіді, фактично стверджує, що:

Однак зауважте, що зміни змінних середовищ не призводять до негайних змін. Наприклад, якщо після внесення змін запустити інший командний рядок, змінні середовища будуть відображати попередні (а не поточні) значення. Зміни набувають чинності, поки ви не вийдете з системи та не ввійдете назад.

Частина про змінні середовища, що повертаються до попередніх значень після перезавантаження командного рядка, - це саме те, що я відчував у Windows Server 2008.

У статті йдеться про:

Щоб здійснити ці зміни, не виходячи з системи, транслюйте WM_SETTINGCHANGE повідомлення у всі вікна системи, щоб усі зацікавлені програми (такі як Провідник Windows, Менеджер програм, Диспетчер завдань, Панель управління тощо) могли проводити оновлення.

Це не означає, що Explorer передає повідомлення WM_SETTINGCHANGE після того, як ви змінили змінні системного середовища, або що воно фактично працює. Я не впевнений, як ви зробите те, що пропонується в статті KB (щоб розповсюдити зміни негайно) з командного рядка.


1
Це єдина відповідь, яка мені підходить. Жоден з інших, включаючи вбивство Провідника важким способом чи "належним" способом, не має ніякого значення.
Хашим

4

Зробити заздрість. змінна доступна відразу:

1. Open a shell

Залежно від змінної середовища, яку ви хочете змінити, зробіть наступне: (припустимо, ви хочете додати новий PATH для нещодавно встановленого додатка). Отже, у запиті оболонки введіть наступне:

2. PATH=%PATH%;C:\type\your\new\path\here

перевірте, чи був доданий ваш новий шлях до змінної середовища

3. echo %PATH%

Зроблено.

Зробіть змінну доступною при перезавантаженні

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Тестується та працює в Windows 7/10


3

Можливе рішення сервісів - це тимчасово запускати їх як інший користувач (крім LocalSystem, LocalService, NetworkService). Наприклад, для сервісу Apache це працює без проблем. Щоб змінити обліковий запис служби, відкрийте консоль services.msc, виберіть сервіс, клацніть сервісні властивості та на другій вкладці введіть облікові дані для входу для користувача. Перезапустіть службу, і її змінні середовища повинні бути оновлені.

Якщо це зареєстрований користувач, це має працювати без проблем. Якщо ви використовуєте поточний обліковий запис користувача, можливо, знадобиться також перезапуск Explorerr.exe. Також зауважте, що запуск служб як звичайний обліковий запис користувача може створювати ризики для безпеки.


1

Оскільки люди ще не додали цієї відповіді, я хотів би зазначити, що ви можете встановити постійні змінні системи, які переживають перезавантаження за допомогою команди SETX.

напр

setx PATH "%PATH%;c:\temp\my\new\path"

Зауважте, що вищезазначене не працюватиме у поточному вікні команд, і вам потрібно буде відкрити нове вікно команд до того, як воно набере чинності. Як результат, залежно від випадку використання; Вам може знадобитися поєднувати це з одним із інших прийомів, описаних вище.

Будь ласка, перегляньте таку URL-адресу для отримання додаткових відомостей :


не працює: / "недійсний синтаксис"
Joe DF

1
Спробуємо зараз. Мабуть, потрібні були подвійні лапки.
Дуг

Дякую, так, я подумав .... окрім того, що я отримую попередження про усікання, тому не можу до нього додати ... :(
Joe DF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.