Відповіді:
Це дійсно залежить від того, як були встановлені ваші змінні середовища. Якщо, наприклад, ви використовували команду "SET" у командному рядку, вона впливає лише на поточний екземпляр. З іншого боку, такі команди, як "SETX", будуть постійно регулювати значення змінної середовища. SETX забезпечить, щоб усі майбутні екземпляри cmd побачили оновлення. Це не вплине на місцеве середовище.
Якщо змінна середовища встановлена іншим додатком і не оновлюється, найчастіше найпростіше або перезапустити процес "explorer.exe", вийти з системи та повернутися назад, або перезавантажити. По суті, вам просто потрібно повідомити провідника, щоб перезарядити змінні середовища. Якщо це розроблений вами додаток, наприклад інсталятор, переконайтеся, що він викликає SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
. Це спонукає дослідника оновити кеш змінних середовищ.
Це важливо, оскільки програми, запущені іншим процесом, успадковують змінні середовища від свого батьківського. Таким чином, якщо ви запускаєте cmd з Explorer, ви отримуєте змінні, як Explorer їх бачить.
Налаштування та відновлення головного середовища в Windows - це те, на що люди BartPE витратили багато часу.
Основне середовище зберігається в реєстрі, але оболонка провідника читає це на свою адресу. Звідси він надсилається до кожного сеансу cmd.exe.
SET впливає лише на середовище cmd. SETX дозволяє змінювати головне середовище, але налаштування не відображається в локальному середовищі.
CONSET і 4NT Френка Вестлейка можуть виносити записи з реєстру, але немає комутаторів, зокрема для головного середовища.
Зазвичай завантажені вікна відслідковують налаштування до реєстру, тоді як завантажене через мінінт (тобто WinPE) цього не робить. Отже, налаштування реєстру та читання реєстру працює в обох, але лише нормально завантажені вікна побачать параметри та перенесуть їх на новий cmd, exe-програму.
це залежить від того, де ви "встановите" змінні середовища. еквівалент вашому прикладу bash був би таким:
файл: env.bat
set FOO=bar
і тепер ви оновите його
% call env.bat
але я думаю, ви це зробили за допомогою діалогового вікна Windows-system-settings (або як його називають). Результатом цього є те, що ви фактично змінили реєстр. ці параметри реєстру відображаються в процесі під час запуску нового процесу.
Таким чином, ви можете або запустити новий процес (cmd.exe у вашому випадку), або ви можете прочитати ключі реєстру, що відображають потрібні зміни. Ви також можете написати трохи .bat / .cmd скрипт, який отримує середовище з реєстру та змінює поточну акорлію навколишнього середовища (якщо настрій вражає мене, я зроблю це після обіду).
Це значно простіше, не потрібно перезавантажувати оболонку:
RefreshEnv.bat
RefreshEnv.bat
Зауважте, що ваші щойно додані змінні середовища доступні в будь-якому новому екземплярі Command / Powershell, підтверджуючи оновлення.