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
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
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
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Esse bit só deve ser definido para componentes transitivos. Como usar componentes transitivos.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
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
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
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 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.