Админ

воскресенье, 30 августа 2015 г.

Как установить значения переменных окружения в Windows 8

|
Windows 8 принесла с собой не только раздражающие многих особенности интерфейса пользователя, но и некоторые, подчас нетривиальные, проблемы, связанные с запуском программ, особенно написанных достаточно давно. Одной из таких проблем стала работа с переменными среды (или с переменными окружения, как они назывались в старых версиях операционной системы).

Постановка задачи

Однажды на работе возникла ситуация: на новенький ноутбук с модной Windows 8.1 понадобилось установить программу, выпущенную в 2001 году (зачем — это отдельный вопрос, сказка не о том). Разумеется, эта программа ничего «не знает» о модели безопасности UAC, которая появилась в Windows Vista, поэтому устанавливать её в стандартную папку Program Files можно только из-под учётной записи администратора. Но это, в общем, ерунда. Кроме того, первый запуск тоже нужно производить из-под той же учётной записи (программа перезаписывает некоторые свои файлы при первом запуске). И это мы тоже уже знаем: мы эту программу уже устанавливали много раз и под Windows XP, и под Vista, и под Windows 7.

А не ерунда — это то, что корректно установленная программа наотрез отказывалась запускаться из-под «обычной» учётной записи. Не помогали ни установка в другую папку, ни шаманские пляски с правами доступа к этой папке. Экспериментальным путём удалось выяснить, что программа активно использует переменную окружения PATH, значение которой должно было быть установлено программой-инсталлятором, но почему-то не установилось (предположение, почему так вышло — ниже). Для «той эпохи» это было нормально.

А дальше начинается самое интересное. Попытка установить переменную окружения штатными средствами (через диалог «Свойства системы») провалилась. Переменная благополучно меняет своё значение, но программой оно не читается (вероятно, потому же, почему не сработал и нижеследующий приём). Команда SET PATH=%PATH%;<new path>, до боли знакомая каждому, чьи лучшие годы жизни прошли под сенью чёрно-белой строки MS-DOS, не работает. Вернее, она работает, но программа «видит» новое значение только если её сразу же запустить из той же командной строки, а при закрытии командного процессора значение опять восстанавливается.

В общем, вывод у нас получился такой: в Windows 8 команда SET создаёт некую временную копию набора переменных окружения, которая доступна только данному процессу.

Решение

Спасением стала случайно (при поиске вовсе по другой теме) найденная команда SETX (https://technet.microsoft.com/en-us/library/cc755104.aspx), которая работает, помимо Windows 8, ещё в Windows Vista и серверных Windows 2008 и 2012. Windows 7 в списке совместимости почему-то не упомянута, но там и SET работает нормально. Только что вышедшая Windows 10 тоже не упомянута (надеюсь, это значит, что на сайте всего лишь не успели обновить информацию, а не то, что после обновления операционной системы нам опять придётся мучиться).

Команда предназначена для работы с реестром через командную строку, но одной из её «побочных» функций является установка переменных окружения.

Синтаксис команды такой:

SETX PATH %PATH%;<new path>

Если путь к папке <new path> содержит пробелы, то обычно в командной строке такой путь заключают в двойные кавычки. Здесь это правило работает несколько иначе: кавычки ставят вокруг всей конструкции, включая %PATH%:

SETX PATH "%PATH%;C:\Program Files\AncientApp"

Специально для тех, кто раньше пользовался командой SET, важно отметить, что синтаксис команды SETX отличается отсутствием знака равенства после имени переменной.


Комментариев нет:

Отправить комментарий

К началу