Partilhar via


ICEM09

O ICEM09 verifica se o módulo de mesclagem lida com segurança com diretórios predefinidos. Ele faz isso verificando se nenhum componente no módulo instala um diretório em um diretório de sistema predefinido, como "ProgramFilesFolder" ou "StartMenuFolder". Em vez disso, os módulos devem usar diretórios com nomes exclusivos (criados com a convenção de nomenclatura do módulo de mesclagem) e usar ações personalizadas para direcionar o diretório de destino apropriado. Essa abordagem evita que os módulos entrem em conflito com uma estrutura de diretórios existente no banco de dados final. O ICEM09 verifica se as ações personalizadas necessárias para que essa técnica funcione não existem (para que a ferramenta de mesclagem possa gerá-las) ou existem na forma correta (para que funcionem conforme o esperado).

A falha na correção de um aviso ou erro relatado pelo ICEM09 pode causar problemas para os clientes do seu módulo de mesclagem. Linhas de tabela de diretório com chaves primárias, como ProgramFilesFolder, geralmente existem em um banco de dados; portanto, se os componentes do módulo forem instalados diretamente em diretórios predefinidos, como ProgramFilesFolder, as entradas de diretório no módulo poderão colidir com linhas já existentes. Essa condição exigiria que o usuário do módulo dividisse os arquivos de origem do módulo para corresponder ao diretório de origem existente.

Resultado

ICEM09 relata um erro ou aviso quando um componente de módulo instala um diretório em um diretório de sistema predefinido, causando um possível conflito de nome com a estrutura de diretórios existente.

Exemplo

ICEM09 posta os seguintes avisos para um módulo que contém as entradas de banco de dados mostradas.

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.

Renomeie o diretório do módulo de mesclagem para que ele não corresponda a uma propriedade do Windows Installer e, portanto, seja exclusivo. Em seguida, defina uma propriedade com o mesmo nome para o valor do diretório do Windows Installer. Quando a resolução do diretório ocorre, o diretório tem uma propriedade do mesmo nome, portanto, o local de instalação do diretório é o valor da propriedade. Os arquivos são movidos do local de origem distinto para o mesmo local de destino. Esse processo deve remover completamente os conflitos de mesclagem.

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'

Se a ação não tiver o número de sequência 1, ela pode não ser mesclada no banco de dados de destino com antecedência suficiente na sequência para funcionar efetivamente.

Para corrigir esse aviso, defina o número de sequência como 1. Observe que a maioria das ferramentas de mesclagem atuais (mas não algumas versões mais antigas) gerará essas ações personalizadas no momento da mesclagem, portanto, nem sempre é necessário criar explicitamente as ações no módulo de mesclagem.

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."

Como a coluna CustomAction é a chave primária da tabela CustomAction, algumas ferramentas de mesclagem podem gerar ações duplicadas porque o nome da ação pré-criada é diferente.

Para corrigir esse aviso, nomeie a ação da mesma forma que o diretório de destino. Observe que a maioria das ferramentas de mesclagem atuais (mas não algumas versões mais antigas) geram essas ações personalizadas no momento da mesclagem, portanto, nem sempre é necessário criar explicitamente as ações no módulo de mesclagem.

Tabela de Diretórios

Diretório Directory_Parent DefaultDir
ProgramFilesFolder Diretório1 Um
StartMenuFolder Diretório2 B:C
AppDataFolder Diretório3 D
MyPicturesFolder Diretório4 E

 

Tabela de componentes

Componente Diretório
Componente1.<GUID> ProgramFilesFolder
Componente2.<GUID> StartMenuFolder
Componente3.<GUID> AppDataFolder
Componente4.<GUID> MyPicturesFolder

 

Tabela CustomAction

CustomAction Tipo Fonte Público-alvo
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

Tabela ModuleInstallExecuteSequence

Ação Sequência BaseAction Após Condição
StartMenuFolder.<GUID> 100

 

Merge Module ICE Reference