ICEM09

O ICEM09 verifica se o módulo de mesclagem lida com diretórios predefinidos com segurança. 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 se existem na forma correta (para que funcionem conforme o esperado).

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

Result

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

Exemplo

O 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 não corresponda a uma propriedade do Windows Installer e, portanto, seja exclusivo. Em seguida, defina uma propriedade do mesmo nome para o valor do diretório Windows Installer. Quando a resolução de 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 com eficiência.

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.

Tabela Directory

Diretório Directory_Parent DefaultDir
ProgramFilesFolder Directory1 Um
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

 

Tabela Component

Componente Diretório
Component1.<GUID> ProgramFilesFolder
Component2.<GUID> StartMenuFolder
Component3.<GUID> AppDataFolder
Component4.<GUID> MyPicturesFolder

 

Tabela CustomAction

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

 

Tabela ModuleInstallExecuteSequence

Ação Sequência BaseAction After (após) Condição
StartMenuFolder.<GUID> 100

 

Referência ICE do módulo de mesclagem