|
|
|||||||||||||||||||||||||||||
|
Секреты Windows: Скрытые переменныеИсточник: technet Рэймонд Чен
Чтобы правильно встраивать переменные окружения друг в друга, надо всего лишь понимать последовательность операций. Рэймонд ЧенВ глубинах панели управления скрыто диалоговое окно Environment Variables. Чтобы его найти, перейдите в апплет панели управления System Properties. Затем встаньте на одну ногу, перейдите на вкладку Advanced и щелкните кнопку Environment Variables, произнося алфавит задом наперед. Ну, пожалуй, не все эти действия так уж необходимы. Однако очевидно, что разработчики Windows не собирались предоставлять простой доступ к диалоговому окну Environment Variables обычным пользователям и, тем более, не рассчитывали на их понимание того, что оно делает. При формировании среды для нового пользователя система обращается к параметрам, задаваемым в этом диалоговом окне, чтобы определить, какие переменные и с какими значениями добавить в среду. Общий принцип таков, что если переменная окружения определена в обоих разделах - User и System, - будет использоваться значение из раздела User. Тем не менее, система не игнорирует переменные из раздела System полностью - они могут использоваться для определения переменных из раздела User. Люди часто стремятся, чтобы переменные окружения User основывались на переменных окружения System. Например, чтобы переменная PATH из раздела User представляла собой переменную PATH из раздела System, к которой добавлено еще несколько каталогов. Вот как выполняется процесс формирования среды. Он, грубо говоря, состоит из четырех этапов.
Замещение происходит после того, как система вычисляет новое значение, так что можно, например, определить значение переменной PATH из раздела User как %PATH%;C:\Extras. Переменная %PATH% будет ссылаться на версию переменной из раздела System. Теперь вам известно, что работает, и вы можете определить, что работать не должно: все то, что не было описано ранее как работающее. Например, %SystemRoot% можно использовать везде. Любую переменную окружения System можно использовать для определения переменной окружения User. Можно также использовать заранее определенную переменную уровня пользователя для задания переменной окружения User. Но нельзя воспользоваться переменной окружения уровня пользователя для определения переменной окружения System. Время нельзя повернуть вспять. У одного пользователя возникли проблемы, когда он задал для переменной PATH из раздела System значение %APPDATA%;C:\Windows. Оказалось, что в полученной в результате среде путь просто содержал литеральное значение в том виде, в каком его задали (со знаками процента и прочим) - подстановка значения переменной окружения APPDATA не выполнилась. Если вы посмотрите приведенную выше последовательность этапов, причина будет очевидна. Пользователь пытался задать для переменной окружения System значение, основанное на еще не определенной переменной. Решение несложно: отредактировать переменную PATH не в списке System, а в списке User. Тогда, если потребуется задействовать переменную %APPDATA%, эта переменная уже будет определена. Код, формирующий среду User, мог бы строить сложный граф зависимостей. Тогда было бы можно реализовать специальный синтаксис, позволяющий при определении переменных объявлять, откуда берется значение %PATH% - из версии переменной PATH из раздела System или из раздела User. Было бы можно собирать всю эту информацию, строить граф зависимостей и корректно определять значения переменных в том порядке, в каком они зависят друг от друга. При этом пришлось бы решать, что делать при обнаружении циклических ссылок. Но цель создания среды - не эмуляция механизма вычислений из области электронных таблиц. Требуется всего лишь создать блок переменных окружения по некоторой базовой информации, и благодаря простоте правил весь этот процесс оказывается несложным для описания и изучения. Неужели это так сложно понять? Ссылки по теме
|
|