Tabela de componentes
A tabela Componente lista componentes e tem as seguintes colunas.
Coluna | Tipo | Chave | Nulo |
---|---|---|---|
Componente | Identificador | Y | N |
ComponentId | GUID | N | Y |
Directory_ | Identificador | N | N |
Atributos | inteiro | N | N |
Condição | Condição | N | Y |
Caminho-chave | Identificador | N | Y |
Colunas
-
Componente
-
Identifica o registro do componente.
Chave de tabela primária.
-
ComponentId
-
Um GUID de cadeia de caracteres exclusivo para este componente, versão e idioma.
Observe que as letras desses GUIDs devem ser maiúsculas. Utilitários como GUIDGEN podem gerar GUIDs contendo letras minúsculas. As letras minúsculas devem ser alteradas para maiúsculas para tornar esses GUIDs de código de componente válidos.
Se esta coluna for nula, o instalador não regista o componente e o componente não pode ser removido ou reparado pelo instalador. Isso pode ser feito intencionalmente se o componente for necessário apenas 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 precisam ser registrados.
-
Directory_
-
Chave externa de uma entrada na tabela Directory. Este é um nome de propriedade cujo valor contém o caminho real, que pode ser definido pelo de ação AppSearch ou com a configuração padrão obtida na tabela Directory.
Os desenvolvedores devem evitar a criação de componentes que colocam arquivos em uma das pastas de Perfil de Usuário. Esses arquivos não estariam disponíveis para todos os usuários em situações multiusuário e poderiam fazer com que o instalador visualizasse permanentemente o componente como necessitando de reparo.
Chave externa para a coluna um da tabela Directory.
-
Atributos
-
Esta coluna contém um sinalizador de bit 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 de .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 a partir da fonte. Esta é uma limitação do Windows Installer e pode retornar um estado de recurso de INSTALLSTATE_BADCONFIG.
Sinalizador de bit - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
A configuração desse bit é recomendada para entradas do Registro gravadas na seção HKCU. Isso garante que o instalador escreva as entradas de registro HKCU necessárias quando houver vários usuários na mesma máquina.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Este bit só deve ser definido para componentes transitivos. Consulte Usando componentes transitivos.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Use esse sinalizador somente para componentes que estão sendo registrados pela tabela do Registro. Não use esse sinalizador para componentes registrados pelo AppId, Class, Extension, ProgId, MIMEe tabelas Verb.- msidbComponentAttributes64bit
- 256
- 0x0100
Se este 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 de Reflexão do Registro em todas as chaves do Registro novas e existentes afetadas por esse componente. Se esse bit estiver definido, o Windows Installer chamará o RegDisableReflectionKey em cada chave que está sendo acessada pelo componente. Este bit está disponível com o Windows Installer versão 4.0. Este bit é ignorado em sistemas de 32 bits. Este bit é ignorado nas versões de 64 bits do Windows XP.
Nota: aplicativos do Windows de 32 bits executados no emulador do Windows de 64 bits (WOW64) referem-se a uma exibição diferente do Registro do que os 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 o MSIUNINSTALLSUPERSEDEDCOMPONENTS propriedade tem o mesmo efeito que definir esse bit para todos os componentes.
Windows Installer 4.0 e versões anteriores: O valor de msidbComponentAttributesUninstallOnSupersedence não é suportado e é ignorado.- msidbComponentAttributesShared
- 2048
- 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 versões anteriores: O valor de msidbComponentAttributesShared não é suportado e é ignorado. -
Condição
-
Esta coluna contém uma instrução condicional que pode controlar se um componente está instalado. Se a condição for nula ou for avaliada como true, o componente será habilitado. Se a condição for avaliada como False, o componente será desativado e não instalado.
O campo Condição habilita ou desabilita um componente somente durante a ação CostFinalize. Para habilitar ou desabilitar um componente após CostFinalize, você deve usar uma ação personalizada ou o DoAction ControlEvent para chamar MsiSetComponentState.
Observe que, a menos que o bit Transitivo na coluna Atributos seja definido para um componente, o componente permanece habilitado uma vez instalado, mesmo que a instrução condicional na coluna Condição seja avaliada posteriormente como Falso em uma instalação de manutenção subsequente do produto.
A coluna Condição na tabela Componente aceita expressões condicionais contendo referências aos estados instalados de recursos e componentes. Para obter informações sobre a sintaxe de instruções condicionais, consulte Conditional Statement Syntax.
-
KeyPath
-
Esse valor aponta para um arquivo ou pasta pertencente ao componente que o instalador usa para detetar o componente. Dois componentes não podem compartilhar o mesmo valor de caminho de chave. O valor nesta coluna também é o caminho retornado pela funçãoMsiGetComponentPath.
Se o valor não for nulo, KeyPath será uma chave primária no do Registro, ODBCDataSource ou tabelas File dependendo do valor Attribute. Se KeyPath for null, 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 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 por WRP (Windows Resource Protection) ou um arquivo protegido pela Proteção de Arquivos do Windows (WFP), esse recurso deverá ser usado como o KeyPath para o componente. Nesse caso, o Windows Installer não instala, atualiza ou 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 suportados para Proteção de Recursos do Windows. Para obter mais informações, consulte Usando o Windows Installer e o Windows Resource Protection.
Comentários
Para obter uma discussão sobre a relação entre componentes e recursos, consulte Tabela de recursos.
O instalador mantém o controle de DLLs compartilhadas independentemente da contagem de referência de DLL compartilhada no registro. Se existir uma contagem de referência para uma DLL partilhada no registo, o instalador aumenta sempre a contagem quando está a instalar o ficheiro e diminui-a quando está a ser desinstalado. Se msidbComponentAttributesSharedDllRefCount, não estiver definido e a contagem de referência ainda não existir, o instalador não criará uma. Observe que a contagem de referência 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 msidbComponentAttributesSharedDllRefCount bit não está definido e não há nenhuma contagem de referência. Assim, o instalador não inicia uma contagem de referência.
- Um aplicativo herdado que compartilha esse componente e não usa o instalador está 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 a 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 como executados a partir da fonte sem serem especificamente projetados para esse uso. Consulte a tabela ServiceInstall para obter mais detalhes.
Observe que os atributos que permitem a instalação a partir do código-fonte nunca devem ser definidos para componentes que contêm bibliotecas de vínculo dinâmico que estão indo para a pasta do sistema. O motivo é que, se o estado de instalação do componente for definido como executado a partir da origem seguindo um recurso ou sendo definido na interface do usuário, as chamadas subsequentes para LoadLibrary na DLL falharão.
Consulte também, Controlling Feature Selection States.