Установка переменных среды требует перезагрузки на 64-битной - PullRequest
26 голосов
/ 08 августа 2011

Я работаю над установщиком, использующим Wix 3.5, который должен установить системную переменную среды PATH.

Вот как я устанавливаю переменную окружения:

<Directory Id="DirectoryName">
    <Component Id="ComponentID" Guid="{BE20AF67-5943-4AF4-BE66-226E2D4B844F}">
        <Environment Id="EnvironmentID" Name="PATH" Action="set" Value="the path" Part="last" Separator=";" System="yes" />
    </Component>
</Directory>

Похоже, что это работает на 32-битных системах без перезагрузки для распознавания изменений. Однако, когда я пытаюсь это сделать на 64-битной Windows 7, требуется перезагрузка.

Это известная проблема в 64-битных системах?

Возможно, лучшим подходом было бы запланировать перезагрузку, чтобы охватить все базы.

Спасибо, Alan

Ответы [ 2 ]

27 голосов
/ 08 августа 2011

Проверьте этот вопрос на ServerFault: Как добавить переменную среды Windows без перезагрузки?

Таким образом, чтобы распространить изменение в списке переменных среды, вы можете написать небольшую программу.который передает WM_SETTINGCHANGE сообщение, как описано в статье базы знаний Как распространить переменные среды в систему .

5 голосов
/ 11 февраля 2016

Когда вы добавляете или устанавливаете переменную среды, всем программам отправляется сообщение WM_SETTINGCHANGE, информирующее их об изменении. Однако любая уже запущенная программа не получит обновленную среду, если только она не сможет обработать это сообщение. Перезагрузка системы обновляет каждую программу.

Обходной путь без перезагрузки:

  1. Убить и перезапустить explorer.exe , хотя это работает не для всех запущенных процессов, а только для текущего зарегистрированного пользователя.
  2. Перезапустите процесс или программу, которую вы хотите использовать, т.е. Попробуйте это с cmd.exe. Опять же, это работает только для вошедшего в систему пользователя.

Подводя итог, чтобы это работало для каждого пользователя, вам все равно нужно перезагрузиться.

...