Tabla Componente

La tabla Componente enumera los componentes y tiene las siguientes columnas.

Columna Tipo Clave Nullable
Componente Identificador Y No
ComponentId GUID No Y
Directory_ Identificador No No
Atributos Entero No No
Condición Condition No Y
KeyPath Identificador No Y

Columnas

Componente

Identifica el registro del componente.

Clave de la tabla principal.

ComponentId

GUID de cadena único para este componente, versión e idioma.

Tenga en cuenta que las letras de estos GUID deben ir en mayúscula. Las utilidades como GUIDGEN pueden generar GUID que contengan letras minúsculas. Las minúsculas se deben cambiar a mayúsculas para hacer que estos GUID de código de componente sean válidos.

Si esta columna es «Null», el instalador no registrará el componente ni podrá eliminarlo ni repararlo. Esto puede ser intencionado si se necesita el componente solamente durante la instalación, como una acción personalizada para limpiar archivos temporales o eliminar un producto antiguo. También puede ser útil para copiar archivos de datos al ordenador de una persona usuaria que no es necesario registrar.

Directorio_

Clave externa de una entrada en la tabla Directorio. Se trata de un nombre de propiedad cuyo valor contiene la ruta de acceso, que se puede establecer mediante la acción AppSearch o con la configuración predeterminada obtenida de la tabla Directorio.

El personal de desarrollo debe evitar crear componentes que sitúen archivos en una de las carpetas de Perfil de usuario. Estos archivos no estarían disponibles para todos los usuarios en situaciones multiusuario y podría provocar que el instalador vea constantemente el componente como si necesitase reparación.

Clave externa para la primera columna de la tabla Directorio.

Atributos

Esta columna contiene una marca de bit que especifica las opciones de ejecución remota. Agregue el bit indicado al valor total de la columna para incluir una opción.

Nota:

Si se está descargando un archivo .msi desde una ubicación web, las marcas de atributo no deberían configurarse para permitir que un componente sea ejecutado desde el origen. Se trata de una limitación de Windows Installer y puede devolver un estado de característica de INSTALLSTATE_BADCONFIG.

Marca de bit
msidbComponentAttributesLocalOnly
0
0x0000
El componente no puede ejecutarse desde el origen. Establezca este bit para todos los componentes que pertenecen a una característica para evitar que la característica sea ejecutada desde la red o ejecutada desde el origen. Tenga en cuenta que si una característica no tiene componentes, la característica siempre mostrará la ejecución desde el origen y la ejecución desde el equipo como opciones válidas.
msidbComponentAttributesSourceOnly
1
0x0001
El componente solo se puede ejecutar desde el origen. Establezca este bit para todos los componentes que pertenecen a una característica para evitar que esta sea ejecutada desde el equipo. Tenga en cuenta que si una característica no tiene componentes, la característica siempre mostrará la ejecución desde el origen y la ejecución desde el equipo como opciones válidas.
msidbComponentAttributesOptional
2
0x0002
El componente se puede ejecutar localmente o desde el origen.
msidbComponentAttributesRegistryKeyPath
4
0x0004
Si se establece este bit, el valor de la columna KeyPath se usará como clave en latabla Registro. Si el campo Valor del registro correspondiente en la tabla Registro es «Null», el campo Nombre de ese registro no debe contener «+», «-» ni «*». Para obtener más información consulte la descripción del campo Nombre en la tabla Registro.
Es recomendable establecer este bit para las entradas del registro escritas en el subárbol HKCU. Esto garantiza que el instalador escriba las entradas de registro HKCU necesarias cuando haya varios usuarios en la misma máquina.
msidbComponentAttributesSharedDllRefCount
8
0x0008
Si se establece este bit, el instalador incrementará el recuento de referencia en el registro de DLL compartidas del archivo de clave del componente. Si no se establece este bit, el instalador incrementará el recuento de referencia solo si el recuento de referencias ya existe.
msidbComponentAttributesPermanent
16
0x0010
Si se establece este bit, el instalador no eliminará el componente durante una desinstalación. El instalador registra un cliente de sistema adicional para el componente en la configuración del registro de Windows Installer.
msidbComponentAttributesODBCDataSource
32
0x0020
Si se establece este bit, el valor de la columna KeyPath será una clave en la tabla ODBCDataSource.
msidbComponentAttributesTransitive
64
0x0040
Si se establece este bit, el instalador revaluará el valor de la instrucción en la columna Condición tras una reinstalación. Si anteriormente el valor era «False» y ha cambiado a «True», el instalador instalará el componente. Si anteriormente el valor era «True» y ha cambiado a «False», el instalador eliminará el componente incluso si este tiene otros productos como clientes.
Este bit solo debe establecerse para componentes transitivos. Consulte Uso de componentes transitivos.
msidbComponentAttributesNeverOverwrite
128
0x0080
Si se establece este bit, el instalador no instalará ni reinstalará el componente si ya existe un archivo de ruta de acceso de clave o una entrada de registro de ruta de acceso de clave para el componente. La aplicación se registra a sí misma como cliente del componente.
Utilice esta marca únicamente en componentes registrados por la tabla Registro. No utilice esta marca en componentes registrados por las tablas AppId, Class, Extension, ProgId, MIME y Verb.
msidbComponentAttributes64bit
256
0x0100
Establezca este bit para marcar esto como un componente de 64 bits. Este atributo facilita la instalación de paquetes que incluyen componentes de 32 y 64 bits. Si este bit no se establece, el componente se registrará como uno de 32 bits.
Si se trata de un componente de 64 bits que reemplaza a uno de 32 bits, establezca este bit y asigne un nuevo GUID en la columna ComponentId.
msidbComponentAttributesDisableRegistryReflection
512
0x0200
Establezca este bit para deshabilitar Reflejo de registro en todas las claves de registro existentes y nuevas afectadas por este componente. Si se establece este bit, Windows Installer llamará a la RegDisableReflectionKey en cada clave a la que acceda el componente. Este bit está disponible con Windows Installer 4.0. Este bit se omite en los sistemas de 32 bits. Este bit se omite en las versiones de 64 bits de Windows XP.
Nota: Las aplicaciones de Windows de 32 bits que se ejecutan en el emulador de Windows de 64 bits (WOW64) hacen referencia a una vista diferente del Registro que las aplicaciones de 64 bits. El reflejo de registro copia algunos valores de registro entre estas dos vistas de registro.
msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
Establezca este bit en un componente de un paquete de revisión para evitar dejar componentes huérfanos en el equipo. Si se instala una revisión posterior marcada con el valor msidbPatchSequenceSupersedeEarlier en la tabla MsiPatchSequence para sustituir la primera revisión, Windows Installer 4.5 y versiones posteriores pueden anular el registro y desinstalar los componentes marcados con el valor msidbComponentAttributesUninstallOnSupersedence. Si el componente no está marcado con este bit, la instalación de una revisión de sustitución puede dejar atrás un componente inutilizado en el equipo.
Establecer la propiedad MSIUNINSTALLSUPERSEDEDCOMPONENTS tiene el mismo efecto que establecer este bit para todos los componentes.
Windows Installer 4.0 y versiones anteriores: El valor msidbComponentAttributesUninstallOnSupersedence no es compatible y se ignora.

msidbComponentAttributesShared
2048
0x0800
Si un componente está marcado con este valor de atributo en al menos un paquete instalado en el sistema, el instalador tratará el componente como marcado en todos los paquetes. Si se desinstala un paquete que comparte el componente marcado, Windows Installer 4.5 podrá seguir compartiendo la versión más alta del componente en el sistema, incluso si el paquete desinstalado fue el que instaló dicha versión.
Si la directiva DisableSharedComponent está establecida en 1, este bit no habilitará la funcionalidad del componente compartido para ningún paquete.
Windows Installer 4.0 y versiones anteriores: El valor msidbComponentAttributesShared no es compatible y se ignora.

Condición

Esta columna contiene una instrucción condicional que puede controlar si se instala un componente. Si la condición es «Null» o se evalúa como «True», el componente se habilitará. Si la condición se evalúa como «False», el componente se deshabilitará y no será instalado.

El campo Condición habilita o deshabilita un componente solo durante la acciónCostFinalize. Para habilitar o deshabilitar un componente tras CostFinalize debe usar una acción personalizada o la acciónDoAction ControlEvent para llamar a MsiSetComponentState.

Tenga en cuenta que, a menos que el bit Transitivo de la columna Atributos se establezca para un componente, el componente permanecerá habilitado una vez instalado incluso si la instrucción condicional de la columna Condición se evalúa posteriormente como «False» en una instalación de mantenimiento posterior del producto.

La columna Condición de la tabla Componente acepta expresiones condicionales que contengan referencias a los estados de características y componentes instalados. Para obtener información sobre la sintaxis de las instrucciones condicionales, consulte Sintaxis de instrucción condicional.

KeyPath

Este valor señala un archivo o carpeta que pertenece al componente que el instalador utiliza para detectar dicho componente. Dos componentes no pueden compartir el mismo valor de ruta de acceso de clave. El valor de esta columna es también la ruta de acceso devuelta por la función MsiGetComponentPath.

Si el valor no es «Null», KeyPath será una clave principal en las tablas Registro, ODBCDataSource o Archivo en función del valor Atributo. Si KeyPath es «Null», la carpeta de la columna Directorio_ se usará como la ruta de acceso de clave.

Dado que las carpetas creadas por el instalador se eliminan cuando se vacían, debe crear una entrada en la tabla CreateFolder para instalar un componente que conste de una carpeta vacía.

Tenga en cuenta que si un componente de Windows Installer contiene un archivo o una clave de registro que está protegida por Protección de recursos de Windows (WRP) o un archivo protegido por Protección de archivos de Windows (WFP), este recurso deberá usarse como KeyPath para el componente. En este caso, Windows Installer no instalará, actualizará ni eliminará el componente. No debería incluirse ningún recurso protegido en un paquete de instalación. En lugar de eso, deberá usar los mecanismos de reemplazo de recursos compatibles para Protección de recursos de Windows. Para más información, consulte Uso de Windows Installer y Protección de recursos de Windows.

Comentarios

Para una explicación sobre la relación entre componentes y características, consulte la tabla Característica.

El instalador realiza un seguimiento de DLL compartidas independientemente del recuento de referencia de DLL compartidas en el registro. Si en el registro existe un recuento de referencia para una DLL compartida, el instalador siempre incrementará el recuento cuando instale el archivo y lo disminuirá cuando lo desinstale. Si no se establece msidbComponentAttributesSharedDllRefCount y el recuento de referencia aún no existe, el instalador no creará ninguno. Tenga en cuenta que el recuento de referencia de SharedDLLs en el registro se incrementa para cualquier archivo instalado en la carpeta Sistema.

Si no se establece msidbComponentAttributesSharedDllRefCount, otra aplicación podrá eliminar el componente incluso si este sigue siendo necesario. Imagine la siguiente situación para ver cómo podría ocurrir esto:

  • El instalador utiliza una aplicación que instala un componente compartido.
  • El bit msidbComponentAttributesSharedDllRefCount no se establece y no hay ningún recuento de referencia. Por lo tanto, el instalador no inicia un recuento de referencia.
  • Se instala una aplicación heredada que comparte este componente y que no usa el instalador.
  • La aplicación heredada crea e incrementa un recuento de referencias para el componente compartido.
  • Se desinstala la aplicación heredada.
  • El recuento de referencia del componente compartido se reduce a cero y se elimina el componente.
  • La aplicación que utiliza al instalador ya no tiene acceso al componente.

Para evitar este comportamiento, establezca msidbComponentAttributesSharedDllRefCount.

Tenga en cuenta que los componentes de servicios del sistema no deben especificarse como de ejecución desde el origen si no están diseñados específicamente para dicha finalidad. Para más información, consulte la tabla ServiceInstall.

Tenga en cuenta que los atributos que habilitan la instalación de ejecución desde el origen nunca deben establecerse para componentes que contengan bibliotecas de vínculos dinámicos que van a la carpeta del sistema. Esto se debe a que, si el estado de la instalación del componente se establece en ejecución desde el origen siguiendo una característica o estableciéndose en la UI, se produciría un error en las posteriores llamadas a LoadLibrary en la DLL.

Consulte Control de estados de selección de características.

Validación

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