Создание таблиц каталогов модулей слияния
Модуль слияния можно применить к файлу .msi для добавления каталогов в установку, но он не может заменить или удалить существующие каталоги. Таблица каталогов указывает макет каталогов, которые модуль слияния предоставляет целевой установке. Таблица каталогов требуется в каждом модуле слияния.
При создании таблицы каталогов в модуле слияния используйте следующие рекомендации. Дополнительные сведения см. в таблице каталогов и с помощью таблицы каталогов.
Структура каталогов, добавленная модулем слияния, должна иметь один корневой каталог. Корневой каталог должен называться TARGETDIR. Пользователь может изменить значение TARGETDIR во время слияния, чтобы указать, где присоединить структуру каталога модуля к дереву каталога целевого объекта.
Таблицы модулей слияния, отличные от таблицы каталогов, не должны напрямую ссылаться на расположения каталогов в TARGETDIR. Расположение такой ссылки изменяется, если значение TARGETDIR изменяется пользователем.
Таблицы в модуле слияния должны ссылаться на расположение дочернего каталога TARGETDIR или другого каталога в дереве модуля слияния. Выполните указанные ниже действия, чтобы указать TARGETDIR в качестве родительского элемента каталога в модуле слияния. Введите каталог в столбец каталога и введите TARGETDIR в столбец Directory_Parent. Используйте нотацию "." в столбце DefaultDir, чтобы указать, что этот каталог находится в TARGETDIR без подкаталога. Дополнительные сведения см. в разделе Использование таблицы каталогов.
Имена каталогов, добавленных модулем слияния, должны использовать соглашения об именовании, описанные в Именование первичных ключей в базах данных для модуля слияния. К ним относятся каталоги, предопределенные свойствами, такими как свойствоSystemFolderи свойство ProgramFilesFolder.
Добавьте GUID к каждой записи в таблице каталогов (кроме TARGETDIR.) К ним относятся записи таблицы каталогов, которые указывают свойства установщика Windows SystemFolder, например SystemFolder.00000000_0000_0000_0000_000000000000. Библиотека Mergemod.dll добавляет пользовательские действия для установки свойства SystemFolder.
Если предопределённый каталог включен в модуль слияния, средство слияния автоматически добавляет в целевую базу данных пользовательское действие типа 51 . Автор модуля слияния должен убедиться, что также включена таблица CustomAction CustomAction. Таблица CustomAction может быть пустой, но эта таблица должна существовать в целевой базе данных и гарантирует, что измененные предопределенные каталоги записываются в правильные расположения. Например, если системный каталог входит в модуль слияния, автор модуля слияния должен убедиться, что существует настраиваемая таблица действий.
Обратите внимание, что алгоритм соответствия для генерации этих пользовательских действий типа 51 проверяет, начинается ли название каталога с одного из предопределённых свойств SystemFolder. Он не проверяет, что имя каталога точно равно свойству каталога. Любой каталог, начинающийся с одного из этих стандартных имен папок, получает пользовательское действие типа 51, даже если остальная часть имени не является GUID. Авторам необходимо следить за тем, чтобы это не создавало ложные срабатывания и непреднамеренное создание кастомных действий на производных первичных ключах, которые начинаются с одного из свойств SystemFolder.
Ниже приведен пример таблицы каталогов в модуле слияния и ожидаемых разрешенных каталогов.
Каталог | 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 |
Ожидается, что модуль слияния с приведенной выше таблицей каталогов приведет к следующей структуре каталогов.
Каталог | Цель | Источник |
---|---|---|
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 |