Почти случайно узнала, что переменные окружения в Windows оказывают большее влияние на программы, чем казалось до этого. Скажем, раньше я считала, что всякие AppData, USERPROFILE, TEMP и прочие приходят откуда-то из внутренностей системы и отражают то, что там творится. И если их значение поменять, то на системные функции вроде SHGetSpecialFolderLocation() и GetTempPath() это не отразится. Однако, это не так: эти функции возвращают значение исходя из значения переменных. Так что модифицировать их значения нужно осторожно: можно, например, поменять путь к каталогу Windows и сделать невозможным запуск дочерних процессов. Кстати, прикол. В Windows есть две переменные, содержащие путь к временному каталогу: TEMP и TMP. При модификации первой GetTempPath() будет возвращать старое значение. Зато значение второй пойдёт в результат функции. Наверняка за этим стоит какая-нибудь история про совместимость.
30 May
2020
Из-за подобной фигни предпочитаю модифицировать переменные исключительно через выполняющиеся при запуске скрипты и setx в них. Через GPO есть шанс поломать так, что автоматически уже фиг починишь.
Setx?
setx позволяет модифицировать переменные глобально, не только в рамках конкретного процесса и дочерних. Так же, как если бы они были изменены через настройки системы. Но только до перезагрузки. Так что если что-то пойдёт не так, то после исправления или удаления скрипта можно просто перезагрузиться.
А вот GPO действительно модифицирует настройки системы и даже после удаления политики ничего уже само не починится.
Например
SETX devmgr_show_nonpresent_devices 1
чтобы видеть отключённые устройства
SETX SEE_MASK_NOZONECHECKS 1
чтобы не было ругани при запуске с сетевых дисков и скачанных из интернета.
А, понятно. Насколько я помню, Setx ещё в Windows 98 Resource Kit появилась OO