USRLOGON.CMD
Первая часть USRLOGON.CMD вызывает скрипт SETPATHS.CMD
REM USRLOGON.CMD@Echo OffCall "%SystemRoot%\Application Compatibility Scripts\SetPaths.Cmd"If "%_SETPATHS%" == "FAIL" Goto Done
Скрипт SETPATHS.CMD проверяет, что ключи реестра для пользовательского окружения находятся на месте. Ключи реестра для текущего пользователя находятся в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders, а ключи для всех пользовательских переменных находятся в таком же подключе в HKEY_LOCAL_MACHINE. Если ни одна из этих переменных не определена, появляется предупреждающее сообщение и выполнение USRLOGON.CMD прекращается. В следующей таблице показаны переменные окружения:
Компонент среды | Значение реестра | ||
All Users: Startup | COMMON_STARTUP | ||
All Users: Start Menu | COMMON_START_MENU | ||
All Users: Start Menu\Programs | COMMON_PROGRAMS | ||
Current User: Start Menu | USER_START_MENU | ||
Current User: Startup | USER_STARTUP | ||
Current User: Start Menu\Programs | USER_PROGRAMS | ||
Current User: My Documents | MY_DOCUMENTS | ||
Current User: Templates | TEMPLATES | ||
Current User: Application Data | APP_DATA |
Затем скрипт проверяет существование скрипта USRLOGN1.CMD и если он есть, то выполняет его. По умолчанию этого скрипта нет, и он нужен лишь в том случае, если у вас есть приложение, которое требует скрипт совместимости, не использующий ROOTDRIVE. Этот тип скрипта может вносить изменения в HKEY_CURRENT_USER безотносительно к размещению файлов, специфичных для пользователя.
If Not Exist "%SystemRoot%\System32\Usrlogn1.cmd" Goto cont0Cd /d "%SystemRoot%\Application Compatibility Scripts\Logon"Call "%SystemRoot%\System32\Usrlogn1.cmd":cont0
ROOTDRIVE - это буква драйва, которую администратор зарезервировал в качестве абсолютного пути к домашнему каталогу пользователя - сетевому или локальному - который одинаков для всех пользователей..
Следующий раздел скрипта создает ROOTDRIVE. Концепция ROOTDRIVE создана потому, что большинство ключей реестра не могут ссылаться на переменные окружения. Например, MyApplication.EXE может иметь в реестре значение UserTemplates, которое определяет путь для хранения модифицируемых пользователем шаблонов. Лучшей опцией для такого маршрута было бы указание %HOMEDRIVE%%HOMEPATH%\MyTemplates, чтобы каждый пользователь мог быть направлен на свой сетевой домашний каталог (если он есть) или в профиль на терминальном сервере. Поскольку вы не можете использовать переменные окружения в значениях реестра, вам необходимо указать абсолютный маршрут, который можно было бы разрешить для всех пользователей. Поэтому на терминальном сервере вы определяете ROOTDRIVE.
USRLOGON. CMD использует команду SUBST для подключения буквы ROOTDRIVE к пользовательскому каталогу во время входа.
Cd /d %SystemRoot%\"Application Compatibility Scripts"Call RootDrv.CmdIf "A%RootDrive%A" == "AA" End.CmdRemRem Отобразить домашний каталог пользователя на букву драйваRem Net Use %RootDrive% /D >NUL: 2>&1Subst %RootDrive% "%HomeDrive%%HomePath%"if ERRORLEVEL 1 goto SubstErrgoto AfterSubst :SubstErrSubst %RootDrive% /d >NUL: 2>&1Subst %RootDrive% "%HomeDrive%%HomePath%" :AfterSubst
Команда SUBST используется в Windows для назначения буквы драйва абсолютному маршруту - в отличие от NET USE, которая назначает букву драйва для пути в формате UNC. Так, SUBST W: C:\WINNT\FONTS сделает драйв W: ссылкой на каталог шрифтов.
Как выбирается и определяется буква для ROOTDRIVE? Когда администратор инсталлирует скрипт совместимости, который ссылается на ROOTDRIVE, скрипт инсталляции автоматически предлагает администратору изменить пакетный файл ROOTDRV2.CMD, указав в нем букву, которую администратор хотел бы зарезервировать. После этого эта буква не может быть использована в других отображениях драйвов на терминальном сервере.