Compartilhar 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 predefinido do sistema, 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 impede que os módulos entrem em conflito com uma estrutura de diretório 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 existam na forma correta (para que funcionem conforme o esperado).

A falha ao corrigir um aviso ou erro relatado pelo ICEM09 pode causar problemas para os clientes do 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 em seu 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

O 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 nomes com a estrutura de diretório existente.

Exemplo

O ICEM09 publica os avisos a seguir 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 de diretório ocorre, o diretório tem uma propriedade de 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 poderá não se mesclar no banco de dados de destino cedo o suficiente na sequência para funcionar efetivamente.

Para corrigir esse aviso, defina o número da 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 em tempo de 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) gera essas ações personalizadas em tempo de mesclagem, portanto, nem sempre é necessário criar explicitamente as ações no módulo de mesclagem.

de tabela de diretório

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

 

da tabela de componentes do

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

 

de tabela CustomAction

CustomAction Tipo Fonte Alvo
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

de tabela ModuleInstallExecuteSequence

Ação Seqüenciar BaseAction Depois Condição
StartMenuFolder.<GUID> 100

 

Referência do ICE do módulo de mesclagem