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


ICEM09

ICEM09 проверяет, что модуль слияния безопасно обрабатывает предопределенные каталоги. Это делается путем проверки того, что ни какой компонент модуля не устанавливает каталог в предопределенный системный каталог, например "ProgramFilesFolder" или "StartMenuFolder". Вместо этого модули должны использовать каталоги с уникальными именами (созданные с помощью соглашения об именовании модулей слияния) и использовать пользовательские действия для целевого каталога. Такой подход предотвращает конфликт модулей с существующей структурой каталогов в конечной базе данных. ICEM09 проверяет, что пользовательские действия, необходимые для работы этого метода, либо не существуют (чтобы средство слияния генерации их создавало), либо существуют в правильной форме (чтобы они работали должным образом).

Сбой в устранении предупреждения или ошибки, о чем сообщил ICEM09, может привести к проблемам для клиентов модуля слияния. Строки таблицы каталога с первичными ключами, такими как ProgramFilesFolder, часто существуют в базе данных; Таким образом, если компоненты в модуле устанавливаются непосредственно в стандартные каталоги, такие как ProgramFilesFolder, записи каталога в модуле могут столкнуться с уже существующими строками. Это условие требует, чтобы пользователь модуля разделял исходные файлы из модуля, чтобы он соответствовал существующему исходному каталогу.

Результат

ICEM09 сообщает об ошибке или предупреждении, когда компонент модуля устанавливает каталог в предварительно определенный системный каталог, что приводит к возможному конфликту имен с существующей структурой каталогов.

Пример

ICEM09 публикует следующие предупреждения для модуля, содержащего отображаемые записи базы данных.

Warning: The component 'Component1.<GUID>' installs directly into the pre-defined 
directory 'ProgramFilesFolder'. It is recommended that merge modules alias 
all such directories to unique names.

Переименуйте каталог модуля слияния, чтобы он не соответствовал свойству установщика Windows и поэтому уникален. Затем присвойте свойству с тем же именем значение каталога установщика Windows. При разрешении каталога каталог имеет свойство с тем же именем, поэтому расположение установки каталога является значением свойства . Файлы перемещаются из разных исходных расположений в то же целевое расположение. Этот процесс должен полностью удалить конфликты слияния.

Warning: The 'ModuleInstallExecuteSequence' table contains a type 51 action 
(StartMenuFolder.<GUID>) for a pre-defined directory, but this action 
does not have sequence number '1'

Если действие не имеет порядкового номера 1, оно может не выполнить слияние с целевой базой данных достаточно рано в последовательности для эффективной работы.

Чтобы устранить это предупреждение, задайте порядковый номер равным 1. Обратите внимание, что большинство актуальных средств слияния (но не некоторые более старые версии) создают эти пользовательские действия во время слияния, поэтому не всегда требуется явно создавать действия в модуле слияния.

Warning: The 'CustomAction' table contains a type 51 action (MyAppDataFolderAction) 
for a pre-defined directory, but the name is not the same as the target directory. 
Many merge tools will generate duplicate actions."

Поскольку столбец CustomAction является первичным ключом таблицы CustomAction, некоторые средства слияния могут создавать повторяющиеся действия, так как предварительно созданное действие имеет другое имя.

Чтобы устранить это предупреждение, присвойте действию имя, аналогичное целевому каталогу. Обратите внимание, что большинство текущих средств слияния (но не некоторые более старые версии) создают эти пользовательские действия во время слияния, поэтому не всегда требуется явно создавать действия в модуле слияния.

Таблица каталогов

Directory Directory_Parent DefaultDir
ProgramFilesFolder Directory1 A
StartMenuFolder Каталог 2 B:C
AppDataFolder Каталог 3 D
MyPicturesFolder Каталог4 E

 

Таблица компонентов

Компонент Directory
Компонент 1.< GUID> ProgramFilesFolder
Компонент 2.< GUID> StartMenuFolder
Компонент 3.< GUID> AppDataFolder
Компонент 4.< GUID> MyPicturesFolder

 

Таблица CustomAction

CustomAction Тип Источник Назначение
StartMenuFolder.< GUID> 51 StartMenuFolder.< GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.< GUID> [AppDataFolder]

 

Таблица ModuleInstallExecuteSequence

Действие Последовательность BaseAction После Условие
StartMenuFolder.< GUID> 100

 

Справочник по ICE модулям слияния