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
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
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
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
Este bit solo debe establecerse para componentes transitivos. Consulte Uso de componentes transitivos.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
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
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
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 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.