Создание таблиц каталогов модуля слияния
Модуль слияния можно применить к файлу .msi для добавления каталогов в установку, но он не может заменить или удалить существующие каталоги. В таблице Каталог указывается макет каталогов, которые модуль слияния предоставляет для целевой установки. Таблица каталогов требуется в каждом модуле слияния.
При создании таблицы каталогов в модуле слияния используйте следующие рекомендации. Дополнительные сведения см. в разделах Таблица каталогов и Использование таблицы каталогов.
Структура каталогов, добавленная модулем слияния, должна иметь один корневой каталог. Корневой каталог должен иметь имя TARGETDIR. Пользователь может изменить значение TARGETDIR во время слияния, чтобы указать, куда следует присоединить структуру каталогов модуля к дереву каталогов целевого объекта.
Таблицы модулей слияния, отличные от таблицы Каталог, не должны напрямую ссылаться на расположения каталогов в TARGETDIR. Расположение такой ссылки изменяется, если значение TARGETDIR изменяется пользователем.
Таблицы в модуле слияния должны ссылаться на расположение дочернего каталога TARGETDIR или другого каталога в дереве модуля слияния. Выполните следующие действия, чтобы указать TARGETDIR в качестве родительского элемента каталога в модуле слияния. Введите каталог в столбец Каталог и введите TARGETDIR в столбец Directory_Parent. Используйте нотацию "." в столбце DefaultDir, чтобы указать, что этот каталог находится в TARGETDIR без подкаталога. Дополнительные сведения см. в разделе Использование таблицы каталогов.
Имена каталогов, добавляемых модулем слияния, должны использовать соглашения об именовании, описанные в разделе Именование первичных ключей в базах данных модуля слияния. К ним относятся каталоги, предопределенные свойствами, такими как свойства SystemFolder и ProgramFilesFolder .
Добавьте GUID к каждой записи в таблице каталогов (кроме TARGETDIR). Сюда входят записи таблицы каталогов, указывающие свойства SystemFolder установщика Windows, например SystemFolder.00000000_0000_0000_0000_000000000000. Библиотека Mergemod.dll добавляет пользовательские действия для задания свойства SystemFolder .
Если в модуль слияния включен стандартный каталог, средство слияния автоматически добавляет тип настраиваемого действия 51 в целевую базу данных. Автор модуля слияния должен убедиться, что также включена таблица CustomAction . Таблица CustomAction может быть пустой, но эта таблица должна существовать в целевой базе данных и гарантирует, что измененные предопределенные каталоги будут записаны в правильные расположения. Например, если системный каталог включен в модуль слияния, автор модуля слияния должен убедиться, что существует таблица настраиваемых действий.
Обратите внимание, что алгоритм сопоставления для создания пользовательских действий типа 51 проверяет только, что имя каталога начинается с одного из предопределенных свойств SystemFolder . Он не проверяет, что имя каталога точно равно свойству каталога. Любой каталог, начинающийся с одного из этих стандартных имен папок, получает настраиваемое действие типа 51, даже если остальная часть имени не является GUID. Авторы должны позаботиться о том, чтобы это не создавало ложноположительные совпадения и непреднамеренное создание пользовательских действий на производных первичных ключах, которые начинаются с одного из свойств SystemFolder .
Ниже приведен пример таблицы каталогов в модуле слияния и ожидаемых разрешенных каталогов.
Directory | Directory_Parent | DefaultDir |
---|---|---|
TARGETDIR | SourceDir | |
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | .:MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | TARGETDIR | MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | Dir00.BC82E350_ C7FC_11d1_ A848_006097ABDE17 | MFC_OCX |
Ожидается, что модуль слияния с приведенной выше таблицей Directory приведет к следующей структуре каталогов.
Directory | Целевой объект | Источник |
---|---|---|
Dir00.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [Точка установки модуля слияния]\ | [Исходная точка модуля слияния]\MMM_Prog |
SystemFolder.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [SystemFolder]\ | [Исходная точка модуля слияния]\MMM_Sys |
Dir02.BC82E350_ C7FC_11d1_ A848-006097ABDE17 | [Точка установки модуля слияния]\MFC_OCX | [Исходная точка модуля слияния]\MMM_Prog\MFC_OCX |