Теневой регистр
Сегодня большинство приложений при установке добавляют значения в ветвь реестра HKEY_CURRENT_USER. Как говорилось ранее, перевод системы в режим инсталляции либо с командной строки, либо через Add/Remove Programs, указывает системе следить за изменениями файлов INI и реестра. Эти изменения сохраняются в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install, а INI файлы, устанавливаемые в в каталоги windows или windows\system
записываются в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\Compatibility\IniFiles. Для понимания разных букв дисков и каталогов, упоминаемых в следующих разделах, мы будем использовать следующие определения:
- <HomeShare>
Используется для обозначения UNC, назначенному Домашнему диску.
-
<RootDrive> Используется для обозначения буквы драйва, который заменяется на <HomeDrive> и <HomeShare>.
-
<HomeSpace>
Общий термин, используемый для обозначения места размещения пользовательских файлов и установок.
<HomeDrive> (Домашний драйв)
Используется для обозначения буквы диска, указанного в профиле объекта User в компоненте
Active Directory Users and Computers
При регистрации в системе нового пользовтеля, система проверяет его каталоги windows и windows\system
в поиске файлов INI, записанных в ...\Compatibility\IniFiles и копирует эти файлы, если они не существуют или имеются более свежие копии, из системного каталога сервера в пользовательский <HomeShare>. Для каждого пользователя система автоматически создает отдельный <HomeShare> и каталоги \windows и \windows\system
для хранения файлов INI, DLL и прочих файлов, нужных приложению. Если в системном каталоге \winnt существуют более свежие копии, старые переименовываются с расширением .CTX, а новые копируются в полдьзовательские \windows и \windows\system.
При запуске проиложения оно может обращаться к ключам реестра, которые не существуют в пользовательском контексте HKEY_CURRENT_USER. В этом случае система проверяет HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install, и если там есть нужный ключ, он копируется в правильное место в ветви HKEY_CURRENT_USER. Если приложение использует вызов API GetPrivateProfileString() для доступа к INI-файлу, который не существует в пользовательском каталоге \windows, то система будет искать его в
%systemroot%. Если файл найден, он копируется в <HomeShare> пользователя в каталог \Windows.
