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.
Diretório | Directory_Parent | DefaultDir |
---|---|---|
ProgramFilesFolder | Diretório1 | Um |
StartMenuFolder | Diretório2 | B:C |
AppDataFolder | Diretório3 | D |
MyPicturesFolder | Diretório4 | E |
Componente | Diretório |
---|---|
Componente1.<GUID> | ProgramFilesFolder |
Componente2.<GUID> | StartMenuFolder |
Componente3.<GUID> | AppDataFolder |
Componente4.<GUID> | MyPicturesFolder |
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 |
Tópicos relacionados