Tabela Component

A tabela Component lista componentes e tem as colunas a seguir.

Coluna Tipo Chave Nullable
Componente Identificador S N
ComponentId GUID N S
Directory_ Identificador N N
Atributos Inteiro N N
Condição Condição N S
KeyPath Identificador N S

Colunas

Componente

Identifica o registro do componente.

Chave de tabela primária.

ComponentId

Um GUID de cadeia de caracteres exclusivo para esse componente, versão e linguagem.

Observe que as letras desses GUIDs devem estar em maiúsculas. Utilitários como GUIDGEN podem gerar GUIDs que contêm letras minúsculas. As letras minúsculas precisam ser alteradas para maiúsculas a fim de tornar esses GUIDs de código de componente válidos.

Se a coluna for nula, o instalador não registrará o componente e o componente não poderá ser removido ou reparado pelo instalador. Isso pode ser feito intencionalmente se o componente só for necessário durante a instalação, como uma ação personalizada que limpa arquivos temporários ou remove um produto antigo. Também pode ser útil ao copiar arquivos de dados para o computador de um usuário que não precisem ser registrados.

Directory_

Chave externa de uma entrada na tabela Directory. Esse é um nome de propriedade cujo valor contém o caminho real, que pode ser definido pela ação AppSearch ou com a configuração padrão obtida da tabela Directory.

Os desenvolvedores precisam evitar a criação de componentes que coloquem arquivos em uma das pastas Perfil de Usuário. Esses arquivos não estariam disponíveis para todos os usuários em situações com vários usuários e poderiam fazer com que o instalador exibisse permanentemente o componente como exigindo reparo.

Chave externa para a coluna 1 da tabela Directory.

Attributes

Esta coluna contém um sinalizador de bits que especifica opções para execução remota. Adicione o bit indicado ao valor total na coluna para incluir uma opção.

Observação

No caso de um arquivo .msi que está sendo baixado de um local da Web, os sinalizadores de atributo não devem ser definidos para permitir que um componente seja executado na origem. Essa é uma limitação do Windows Installer e pode retornar um estado de recurso de INSTALLSTATE_BADCONFIG.

Sinalizador de bits
msidbComponentAttributesLocalOnly
0
0x0000
O componente não pode ser executado na origem. Defina esse bit para todos os componentes que pertencem a um recurso a fim de impedir que o recurso seja executado na rede ou na origem. Observe que, se um recurso não tiver componentes, ele sempre mostrará execução na origem e execução no meu computador como opções válidas.
msidbComponentAttributesSourceOnly
1
0x0001
O componente só pode ser executado na origem. Defina esse bit para todos os componentes que pertencem a um recurso a fim de impedir que o recurso seja executado no meu computador. Observe que, se um recurso não tiver componentes, ele sempre mostrará execução na origem e execução no meu computador como opções válidas.
msidbComponentAttributesOptional
2
0x0002
O componente pode ser executado localmente ou na origem.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Se esse bit for definido, o valor na coluna KeyPath será usado como uma chave na tabela Registry. Se o campo Value do registro correspondente na tabela Registry for nulo, o campo Name nesse registro não poderá conter "+", "-" ou "*". Para obter mais informações, confira a descrição do campo Name na tabela Registry.
A definição desse bit é recomendada para entradas do registro gravadas no hive HKCU. Isso garante que o instalador grave as entradas necessárias do registro HKCU quando houver vários usuários no mesmo computador.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Se esse bit for definido, o instalador incrementará a contagem de referência no registro de DLL compartilhado do arquivo de chave do componente. Se esse bit não estiver definido, o instalador incrementará a contagem de referência somente se a contagem de referência já existir.
msidbComponentAttributesPermanent
16
0x0010
Se esse bit for definido, o instalador não removerá o componente durante uma desinstalação. O instalador registra um cliente de sistema extra para o componente nas configurações do registro do Windows Installer.
msidbComponentAttributesODBCDataSource
32
0x0020
Se esse bit for definido, o valor na coluna KeyPath será uma chave na tabela ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Se esse bit estiver definido, o instalador reavaliará o valor da instrução na coluna Condition após uma reinstalação. Se anteriormente o valor era False e foi alterado para True, o instalador instala o componente. Se anteriormente o valor era True e foi alterado para False, o instalador remove o componente mesmo que o componente tenha outros produtos como clientes.
Esse bit só deve ser definido para componentes transitivos. Como usar componentes transitivos.
msidbComponentAttributesNeverOverwrite
128
0x0080
Se esse bit estiver definido, o instalador não instalará ou reinstalará o componente se um arquivo de caminho de chave ou uma entrada de registro de caminho de chave para o componente já existir. O aplicativo se registra como um cliente do componente.
Use esse sinalizador somente para componentes que estão sendo registrados pela tabela Registry. Não use esse sinalizador para componentes registrados pelas tabelas AppId, Class, Extension, ProgId, MIME e Verb.
msidbComponentAttributes64bit
256
0x0100
Defina esse bit para marcar isso como um componente de 64 bits. Esse atributo facilita a instalação de pacotes que incluem componentes de 32 bits e 64 bits. Se esse bit não estiver definido, o componente será registrado como um componente de 32 bits.
Se esse for um componente de 64 bits substituindo um componente de 32 bits, defina esse bit e atribua um novo GUID na coluna ComponentId.
msidbComponentAttributesDisableRegistryReflection
512
0x0200
Defina esse bit para desabilitar a Reflexão do Registro em todas as chaves existentes e novas do registro afetadas por esse componente. Se esse bit for definido, o Windows Installer chamará RegDisableReflectionKey em cada chave acessada pelo componente. Esse bit está disponível com o Windows Installer versão 4.0. Esse bit é ignorado em sistemas de 32 bits. Esse bit é ignorado nas versões de 64 bits do Windows XP.
Observação: aplicativos windows de 32 bits em execução no emulador do Windows de 64 bits (WOW64) referem-se a uma exibição diferente do registro do que aplicativos de 64 bits. A reflexão do registro copia alguns valores do registro entre essas duas exibições do registro.
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Defina esse bit para um componente em um pacote de patch a fim de evitar a saída de componentes órfãos no computador. Se um patch subsequente for instalado, marcado com o valor msidbPatchSequenceSupersedeEarlier em sua tabela MsiPatchSequence para substituir o primeiro patch, o Windows Installer 4.5 e posterior poderá cancelar o registro e desinstalar componentes marcados com o valor msidbComponentAttributesUninstallOnSupersedence. Se o componente não estiver marcado com esse bit, a instalação de um patch de substituição poderá deixar para trás um componente não utilizado no computador.
Definir a propriedade MSIUNINSTALLSUPERSEDEDCOMPONENTS tem o mesmo efeito que definir esse bit para todos os componentes.
Windows Installer 4.0 e anterior: o valor msidbComponentAttributesUninstallOnSupersedence não tem suporte e é ignorado.

msidbComponentAttributesShared
2.048
0x0800
Se um componente for marcado com esse valor de atributo em pelo menos um pacote instalado no sistema, o instalador tratará o componente como marcado em todos os pacotes. Se um pacote que compartilha o componente marcado for desinstalado, o Windows Installer 4.5 poderá continuar a compartilhar a versão mais alta do componente no sistema, mesmo que essa versão mais alta tenha sido instalada pelo pacote que está sendo desinstalado.
Se a política DisableSharedComponent estiver definida como 1, nenhum pacote obterá a funcionalidade de componente compartilhado habilitada por esse bit.
Windows Installer 4.0 e anterior: o valor msidbComponentAttributesShared não tem suporte e é ignorado.

Condition

Essa coluna contém uma instrução condicional que pode controlar se um componente está instalado. Se a condição for nula ou avaliada como True, o componente será habilitado. Se a condição for avaliada como False, o componente será desabilitado e não será instalado.

O campo Condition habilita ou desabilita um componente somente durante a ação CostFinalize. Para habilitar ou desabilitar um componente após CostFinalize, você precisará usar uma ação personalizada ou o DoAction ControlEvent para chamar MsiSetComponentState.

Observe que a menos que o bit Transitivo na coluna Attributes esteja definido para um componente, o componente permanecerá habilitado uma vez instalado, mesmo que a instrução condicional na coluna Condition seja avaliada mais tarde como False em uma instalação de manutenção subsequente do produto.

A coluna Condition na tabela Component aceita expressões condicionais que contêm referências aos estados instalados de recursos e componentes. Para obter informações sobre a sintaxe das instruções condicionais, confira Sintaxe das instruções condicionais.

KeyPath

Esse valor aponta para um arquivo ou pasta pertencente ao componente que o instalador usa para detectar o componente. Dois componentes não podem compartilhar o mesmo valor de caminho de chave. O valor nessa coluna também é o caminho retornado pela função MsiGetComponentPath.

Se o valor não for nulo, KeyPath será uma chave primária nas tabelas Registry, ODBCDataSource ou File, dependendo do valor de Attribute. Se KeyPath for nulo, a pasta da coluna Directory_ será usada como o caminho da chave.

Como as pastas criadas pelo instalador são excluídas quando ficam vazias, você deve criar uma entrada na tabela CreateFolder para instalar um componente que consiste em uma pasta vazia.

Observe que se um componente do Windows Installer contiver um arquivo ou chave do registro protegido pelo WRP ( Proteção de Recursos do Windows) ou um arquivo protegido pelo WFP (Proteção de Arquivos do Windows), esse recurso precisará ser usado como o KeyPath para o componente. Nesse caso, o Windows Installer não instala, atualiza nem remove o componente. Você não deve incluir nenhum recurso protegido em um pacote de instalação. Em vez disso, você deve usar os mecanismos de substituição de recursos com suporte para a Proteção de Recursos do Windows. Para obter mais informações, confira Como usar o Windows Installer e a Proteção de Recursos do Windows.

Comentários

Para ver uma discussão sobre a relação entre componentes e recursos, confira Tabela Feature.

O instalador controla as DLLs compartilhadas independentemente da contagem de referências de DLL compartilhadas no registro. Se existir uma contagem de referência para uma DLL compartilhada no registro, o instalador sempre incrementará a contagem quando estiver instalando o arquivo e o reduzirá quando estiver desinstalando. Se msidbComponentAttributesSharedDllRefCount não estiver definido e a contagem de referência ainda não existir, o instalador não o criará. Observe que a contagem de referências SharedDLLs no registro é incrementada para todos os arquivos instalados na pasta System.

Se msidbComponentAttributesSharedDllRefCount não estiver definido, outro aplicativo poderá remover o componente mesmo que ainda seja necessário. Para ver como isso pode acontecer, considere o seguinte cenário:

  • Um aplicativo que usa o instalador instala um componente compartilhado.
  • O bit msidbComponentAttributesSharedDllRefCount não está definido e não há nenhuma contagem de referência. Portanto, o instalador não inicia uma contagem de referência.
  • Um aplicativo herdado que compartilha esse componente e não usa o instalador é instalado.
  • O aplicativo herdado cria e incrementa uma contagem de referência para o componente compartilhado.
  • O aplicativo herdado é desinstalado.
  • A contagem de referência para o componente compartilhado é reduzida para zero e o componente é removido.
  • O aplicativo que usa o instalador não tem mais acesso ao componente.

Para evitar esse comportamento, defina msidbComponentAttributesSharedDllRefCount.

Observe que os componentes de serviços do sistema não devem ser especificados com execução na origem sem serem projetados especificamente para esse uso. Confira a tabela ServiceInstall para obter mais detalhes.

Observe que os atributos que habilitam a instalação de execução de origem nunca devem ser definidos para componentes que contêm bibliotecas de vínculo dinâmico que estão entrando na pasta do sistema. O motivo é que, se o estado de instalação do componente se tornar definido como execução na origem seguindo um recurso ou pela definição na interface do usuário, as chamadas subsequentes de LoadLibrary na DLL falharão.

Confira também Controlar os estados de seleção de recursos.

Validação

ICE02
ICE03
ICE06
ICE07
ICE08
ICE09
ICE18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ICE57
ICE59
ICE62
ICE67
ICE76
ICE79
ICE80
ICE83
ICE86
ICE88
ICE91
ICE92
ICE97