Поделиться через


Создание таблиц каталогов модулей слияния

Модуль слияния можно применить к файлу .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