![]() |
(статья) Переменные среды
Цитата:
Статья основана на сообщении specialist в теме Маленькие Хитрости. |
А почему вдруг локальные переменные стали временными? Ведь время их жизни может быть таким же как и у системных ;). А локальные они потому, что существуют только в окружении конкретного CMD.
|
specialist
Vadikan %ALLUSERSPROFILE%, %SYSTEMDRIVE%, %TEMP%, %PATH% и т.п. правильнее назвать не системными переменными, а переменными окружения или еще переменными среды. Причем если %ALLUSERSPROFILE% - это переменная среды пользователя, то %SYSTEMDRIVE% - системная переменная окружения. Еще статью можно дополнить сторонними утилитами например setenv.exe, кот. позволяет создавать "не временные" переменные окружения различного типа (User Env, Machine Env, Def User Env) из ком строки с использованием все тех же переменных окружения. |
a1ex
Логично. Я просто не в курсе как вообще в локализованой системе называются Environment Variables. Переменные среды? Тогда, наверное, статью надо назвать "Переменные среды и локальные переменные"? /Не видел пост EgOrus |
EgOrus
A setenv не тоже самое делает, что можно сделать добавив переменную через HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment ? /статья исправлена |
Vadikan
Если добавлять переменные через реестр, то они начинают действовать только после перезагрузки. А setenv.exe или setx.exe делают их доступными уже в текущей сессии (но не в текущем процессе, почему-то, а во всех следующих процессах). Вот еще ссылка по классификации переменных: http://www.microsoft.com/technet/scr..._wsh_kmmj.mspx |
Vadikan
А я же и не помню, как было в английской ;).В локализованной XP они называются системные и локальные. А переменные окружения IMHO , это совокупность системных и локальных переменных, которые получает вновь запущенный CMD по наследству из родительского процесса. EgOrus Центр справки и подеержки XP с MUI говорит, что ALLUSERSPROFILE локальная, TEMP системная и пользовательская, SYSTEMDRIVE и PATH системные. |
a1ex
Цитата:
%allusersprofile% локальная? Меня вообще не удивляет разброс в переводах, т.к. они совсем необязательно делаются одним человеком. Petya V4sechkin Цитата:
|
Vadikan
Нда, с классификацией переменных черт ногу сломит :) Одно дело - для пользователей, другое (по ссылке, что я приводил) - для программирования. К примеру, там переменные типа AllUsersProfile, UserProfile, SystemRoot, SystemDrive являются "переменными процесса" (и не относятся к "системным"). Хотя по обычной логике (не программистской :)) их хочется обозвать как раз системными. Цитата:
Сессия = пользовательская сессия; Процесс = командная сессия. Volatile, наверное, можно обозвать "переменными сессии пользователя" или просто "переменными сессии" (Applies to current logon session and is not saved between logoffs and restarts). |
Vadikan
Цитата:
Petya V4sechkin Цитата:
|
вообще, даже при обращении по переменной, не факт, что у пользователя "рабочий стол" называется "рабочий стол" и т.п., и в общем-то теряется весь смысл использования переменных. Точную инфу можно получить из ключей реестра по адресу
Код:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders Код:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders |
a1ex
Да, действительно, я сейчас нашел сам это в справке. Я понял логику :) Системные - возвращают одинаковые значения для всех пользователей, а локальные - возвращают различные значения, в зависимости от залогиненного пользователя (%username%, например). С %ALLUSERSPROFILE% действительно непонятно, что-то я сходу не нашел где она прописана. Может HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, но это HKLM и прямо сейчас я уже не моуг экспериментировать. Petya V4sechkin С Volatile понятно. Да, я видел, что там страница про WSH и дальше второй таблицы не пошел :) All Расковыряли переменные :) Но надо как-то определяться с классификацией :) Значит от справки идет: Системные и Локальные (пользовательские). Это я могу отклассифицировать в статье легко. У нас еще есть Локальные, используемые в скриптах. И как нам их отделить от пользовательских? Может быть сделать так: Введение <..> Переменные среды Четко разделить приведенные примеры переменных на Системные и Локальные (пользовательские) в соотв. со справкой Виндовс и об'яснить в чем разница. Использование переменных в командных файлах (вместо Локальные переменные) Первый пример Код:
DEL /F /Q "%AllUsersProfile%\Главное меню\Активация Windows.lnk" Далее сказать, что в командых файлах при помощи SET можно задавать любые переменные, действующие на протяжении командной сессии. Т.е. вообще не называть их Локальными, чтобы не было путаницы в статье :) И показать второй пример RunOnceEx, а затем третий. Изменение переменных среды и добавление собственных переменных Описать импорт в реестр:
Возможно, придется добавить словарик - командная сессия, текущий сеанс, и т.д. Остается только вопрос как изменить %USERPROFILE%, %ALLUSERSPROFILE% и т.п. Только нужно ли это вообще? Dirk Diggler Надо рассматривать статью в контексте автоматической установки, все-таки. Мало ли что там пользователь наворотил. Может он половину системных файлов удалил. Но мы же ему шансов не даем это проделать. А что он потом там наворотит - это проблема техподдержки :) |
Vadikan
Цитата:
|
Кстати, получается уже три классификации переменных :)
1) на вкладке "Свойства системы -> Переменные среды"; 2) по ссылке, которую я приводил выше; 3) в Центре справки и поддержки. Очевидно, первая является подмножеством второй. А вот третья стоит особняком. Может быть потому, что справку и поддержку делали совсем другие люди, не имевшие отношения к разработке операционной системы? :) Так что самое главное - не запутать читателя статьи :) Может, так и написать, что существуют разные классификации? |
В общем, я задействовал справку виндовс и постарался учесть все пожелания :) http://oszone.net/display.php?id=3673 Комментарии?
|
в списке не указаны %programfiles%(которая просто упоминается в тексте) и %commonprogramfiles%.
|
Dirk Diggler
Да, вот о них и речь :) Почему-то они не упоминаются . Вообще, у меня не срастается классификация с об'яснением. http://tinyurl.com/9jduo Цитата:
Цитата:
Цитата:
%programfiles% - видимо системная, по тому принципу, раз путь переназначить можно и в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion он лежит. |
Получается, что системные/локальные - это классификация по области видимости, а встроенные (aka расчётные)/пользовательские - по возможности напрямую создавать/изменять/удалять (в смысле без последствий :) ). Тогда USERNAME - это встроенная локальная... Возможно слишком вольно, зато логично. Хотя сочетание "Системная пользовательская" звучит несколько дико... :)
|
amel27
Цитата:
Цитата:
Цитата:
Добавил %PROGRAMFILES% и %COMMONPROGRAMFILES% в таблицу, хотя это похоже не совсем правильно. Там другие параметры реестра, и например setenv только импортирует в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment и %PROGRAMFILES% не меняет, насколько я понял. Короче, в параграфе Изменение реестра написал так Цитата:
|
Цитата:
Цитата:
|
amel27
TEMP - либо системаная, либо пользовательская (HKCU\Environment), но не локальная. Добро пожаловать в клуб запутавшихся :) Цитата:
Можно так Цитата:
|
Цитата:
|
Vadikan
Цитата:
После установки системы (через реестр) - не рекомендую. Когда-то проводил такой эксперимент, после этого не работает Outlook Express. Поправка: то есть, некоторые программы привязываются к абсолютному пути, а некоторые - как раз к переменной %ProgramFiles% (что ставит эти программы в неудобное положение :) |
Vadikan
Цитата:
Цитата:
Цитата:
Цитата:
|
a1ex
Цитата:
Цитата:
Цитата:
Petya V4sechkin Цитата:
Цитата:
|
Цитата:
Итак, если критерий - область видимости, тогда имеем: системные, локальные сессии, локальные процесса. Программисты подтвердят, что перекрытие имен - вполне штатная ситуация. Упоминание о "встроенных" переменных наводит на мысль, что должны быть и "не встроенные", здесь скорее всего идет речь о возможности изменять значение этих переменных, т.е. о "владельце" этих переменных - либо это система ("встроенные"), либо пользователь ("???"). Последние ИМХО вполне логично назвать "пользовательскими", хотя с HKCU это никак не связано, т.к. админ может создать свою (т.е. пользовательскую) переменную и в HKLM. Понятно, что такая классификация идет вразрез со справкой и даже противоречит здравому смыслу, т.к. правильней было бы назвать глобальные/локальные и системные/пользовательские соответственно... |
Цитата:
|
Vadikan
Цитата:
|
Вот-вот, если б справка в справке была четкая классификация, то не было бы проблем и в статье. А тут приходится извиваться между справкой и здравым смыслом :)
Так что там с %PROGRAMFILES%-то? К каким переменным мы их относим? Я уже хочу добить это дело. |
Цитата:
|
Vadikan
Цитата:
amel27 Цитата:
|
Попытался создать переменную c:\Temp (системную и поьзовательскую) с помощью setenv. Батник запускаю из CMDLINES.TXT
@echo on :: Creating and Setting Temp folder... md %systemdrive%\Temp setenv -m Temp %systemdrive%\Temp setenv -m Tmp %systemdrive%\Temp setenv -d Temp %systemdrive%\Temp setenv -d Tmp %systemdrive%\Temp exit устанавливает только пользовательскую переменную системную игнорирует. Подскажите в чём ошибка? |
как мне присвоить переменной Х данные полученые из setenv.exe -v HOMEPATH :dont-know :clever-ma HOMEPATH взят к примеру
|
Цитата:
Код:
Echo %HOMEPATH% |
Не могу корректно подправить значение %ProgramFiles% во время загрузки WinPE.
Ситуация следующая: WinPe грузится из образа, а сама Program Files находится вне образа, соотв-но на другом диске. В зависимости от количества логических дисков, буква сидюка плавает. В общем из секции RunOnceEx запускается батник, который устанавливает нужные пути в переменную %ProgramFiles% и в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProgramFilesDir Но система определяет, что переменная %ProgramFiles% не изменилась. (x:\Program Files) Если же вызвать в свойствах системы "переменные среды" и просто нажать "ОК", то все начинает правильно работать. При этом в реестре никаких модификаций не происходит кроме добавления ключа "ParseAutoexec"=1 в "windows NT\Currentversion\Winlogon". ((((( setenv.exe мне не помогла. может надо какую-то функцию через rudll32 вызвать для решения проблемы??? |
:hi:
доброво всем времени суток, :help: когда выполняю SETENV -U X "D:\FOLDER_NAME\%USERNAME%\FOLDER_NAME" то получается так X = D:\FOLDER_NAME\administrator\FOLDER_NAME, а надо чтоб так X = D:\FOLDER_NAME\%USERNAME%\FOLDER_NAME получилось. :help: Пожалста подскажыте что я делаю неправильно. Мне надо получить значение со знаком процентов. :bye: |
Код:
SETENV -U X "D:\FOLDER_NAME\%%USERNAME%%\FOLDER_NAME" |
:sorry:
както совсем из головы вылетело. Спасибо теперь всё работает. |
подскажите какие ключи в реестре нужно поменять чтобы изменить переменные среды пользователя. (те что в верхней половине окошка переменных среды).
нашел эти переменные в HKEY_CURRENT_USER\Environment , HKEY_USERS\.DEFAULT\Environment, HKEY_USERS\S-1-5-18\Environment, HKEY_USERS\S-1-5-19\Environment и т.д. (в HKEY_USERS их несколько подобных и как я понимаю на разных компах эти разделы отличаться будут...) мне просто нужен универсальный рецепт так сказать, т.к. надо в батник прописать изменение этих ключей |
Цитата:
|
т.е. изменение ключей в HKEY_CURRENT_USER\Environment эквивалентно изменению этих переменных среды через свойства моего компьютера? а в USERS лезть не надо?
|
Цитата:
|
Переменные и константы инсталлятора
Переменные и константы инсталлятора -специальные строки, которые заменяют своим значение при создании инсталлятора (Константы) или при его запуске (переменные).Все переменные и константы имеют следующий формат %VaribleName% где Varible Name может быть любым текстом.Различие между переменными и константами в том, что значение константы устанавливается при создании инсталлятора, а значение переменной зависит от свойств системы, на которой будет производиться запуск инсталлятора. Пример: Код:
"%ProgramFiles%\%CompanyName%\%ProductName%" = "C:\ProgramFiles\Company\NewProduct" Код:
"%InstallPath%\myapp.exe" = "C:\ProgramFiles\Company\NewProduct\myapp.exe" |
Время: 04:48. |
Время: 04:48.
© OSzone.net 2001-