Tabla de componentes
La tabla Componente enumera los componentes y tiene las columnas siguientes.
Columna | Tipo | Llave | Nullable |
---|---|---|---|
Componente | identificador | Y | N |
ComponentId | GUID de | N | Y |
Directorio_ | identificador | N | N |
Atributos | entero | N | N |
Condición | condición de | N | Y |
KeyPath | identificador | N | Y |
Columnas
-
componente de
-
Identifica el registro del componente.
Clave de tabla principal.
-
ComponentId
-
Guid de cadena único para este componente, versión e idioma.
Tenga en cuenta que las letras de estos GUID deben estar en mayúsculas. Las utilidades como GUIDGEN pueden generar GUID que contengan letras minúsculas. Las letras minúsculas deben cambiarse a mayúsculas para convertir estos GUID de código de componente válidos.
Si esta columna es null, el instalador no registra el componente y el componente no se puede quitar ni reparar por el instalador. Esto puede realizarse intencionadamente si el componente solo es necesario durante la instalación, como una acción personalizada que limpia archivos temporales o quita un producto antiguo. También puede ser útil al copiar archivos de datos en el equipo de un usuario que no es necesario registrar.
-
Directory_
-
Clave externa de una entrada en la tabla Directorio. Se trata de un nombre de propiedad cuyo valor contiene la ruta de acceso real, que se puede establecer mediante la acción AppSearch o con la configuración predeterminada obtenida de la tabla Directory.
Los desarrolladores deben evitar la creación de componentes que coloquen archivos en una de las carpetas de perfil de usuario. Estos archivos no estarían disponibles para todos los usuarios en situaciones de varios usuarios y podrían hacer que el instalador vea permanentemente el componente como la necesidad de reparación.
Clave externa para la columna uno de la tabla Directorio.
-
atributos de
-
Esta columna contiene una marca de bits que especifica las opciones de ejecución remota. Agregue el bit indicado al valor total de la columna para incluir una opción.
Nota
En el caso de un archivo .msi que se está descargando desde una ubicación web, las marcas de atributo no deben establecerse para permitir que un componente se ejecute 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 bits - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
Se recomienda establecer este bit para las entradas del Registro escritas en el subárbol HKCU. Esto garantiza que el instalador escriba las entradas del 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
Use esta marca solo para los componentes registrados por la tabla del Registro. No use esta marca para los componentes registrados por el AppId , Class, Extension, ProgId, MIMEy tablas verb.- msidbComponentAttributes64bit
- 256
- 0x0100
Si se trata de un componente de 64 bits que reemplaza un componente de 32 bits, establezca este bit y asigne un nuevo GUID en la columna ComponentId.msidbComponentAttributesDisableRegistryReflection
512
0x0200
Establezca este bit para deshabilitar reflexión del Registro en todas las claves del Registro existentes y nuevas afectadas por este componente. Si se establece este bit, Windows Installer llama al RegDisableReflectionKey en cada clave a la que accede el componente. Este bit está disponible con Windows Installer versión 4.0. Este bit se omite en sistemas de 32 bits. Este bit se omite en las versiones de 64 bits de Windows XP.
Nota: 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. La reflexión del Registro copia algunos valores del Registro entre estas dos vistas del 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: no se admite el valor msidbComponentAttributesUninstallOnSupersedence y se omite.- msidbComponentAttributesShared
- 2048
- 0x0800
Si la directiva DisableSharedComponent está establecida en 1, ningún paquete obtiene la funcionalidad del componente compartido habilitada por este bit.
Windows Installer 4.0 y versiones anteriores: el valor de msidbComponentAttributesShared no se admite y se omite. -
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 está habilitado. Si la condición se evalúa como False, el componente está deshabilitado y no está instalado.
El campo Condición habilita o deshabilita un componente solo durante la acción CostFinalize de . Para habilitar o deshabilitar un componente después de CostFinalize, debe usar una acción personalizada o el DoAction ControlEvent para llamar a MsiSetComponentState.
Tenga en cuenta que, a menos que el bit transitivo de la columna Atributos esté establecido para un componente, el componente permanece habilitado una vez instalado aunque la instrucción condicional de la columna Condición se evalúe posteriormente como False en una instalación de mantenimiento posterior del producto.
La columna Condición de la tabla Componente acepta expresiones condicionales que contienen referencias a los estados instalados de características y componentes. Para obtener información sobre la sintaxis de instrucciones condicionales, vea Sintaxis de instrucción condicional.
-
KeyPath
-
Este valor apunta a un archivo o carpeta que pertenece al componente que usa el instalador para detectar el componente. Dos componentes no pueden compartir el mismo valor de ruta de acceso de clave. El valor de esta columna también es la ruta de acceso devuelta por la función MsiGetComponentPath.
Si el valor no es NULL, KeyPath es una clave principal en el registro de , ODBCDataSourceo Tablas de archivos en función del valor atributo. Si KeyPath es null, la carpeta de la columna Directory_ se usa como ruta de acceso de la 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 consta de una carpeta vacía.
Tenga en cuenta que si un componente de Windows Installer contiene un archivo o una clave del Registro que está protegida por Protección de recursos de Windows (WRP) o un archivo protegido por Protección de archivos de Windows (PMA), este recurso debe usarse como KeyPath para el componente. En este caso, Windows Installer no instala, actualiza ni quita el componente. No debe incluir ningún recurso protegido en un paquete de instalación. En su lugar, debe usar los mecanismos de reemplazo de recursos admitidos para La protección de recursos de Windows. Para obtener más información, consulte Usar Windows Installer y Windows Resource Protection.
Observaciones
Para obtener una explicación de la relación entre los componentes y las características, vea Feature Table.
El instalador realiza un seguimiento de los archivos DLL compartidos independientemente del recuento de referencias de DLL compartidos en el registro. Si existe un recuento de referencias para un archivo DLL compartido en el registro, el instalador siempre incrementa el recuento cuando instala el archivo y lo disminuye cuando se desinstala. Si msidbComponentAttributesSharedDllRefCount, no se establece y el recuento de referencias aún no existe, el instalador no creará uno. Tenga en cuenta que el recuento de referencias de SharedDLLs del registro se incrementa para los archivos instalados en la carpeta System.
Si no se establece msidbComponentAttributesSharedDllRefCount, otra aplicación puede quitar el componente incluso si sigue siendo necesario. Para ver cómo podría ocurrir esto, considere el siguiente escenario:
- Una aplicación que usa el instalador instala un componente compartido.
- El msidbComponentAttributesSharedDllRefCount bit no está establecido y no hay ningún recuento de referencias. Por lo tanto, el instalador no inicia un recuento de referencias.
- Se instala una aplicación heredada que comparte este componente y no usa el instalador.
- La aplicación heredada crea e incrementa un recuento de referencias para el componente compartido.
- La aplicación heredada se desinstala.
- El recuento de referencias del componente compartido se reduce a cero y se quita el componente.
- La aplicación que usa el 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 run-from-source sin diseñarse específicamente para dicho uso. Consulte la tabla ServiceInstall para obtener más información.
Tenga en cuenta que los atributos que habilitan la instalación de ejecución desde el origen nunca deben establecerse para los componentes que contienen bibliotecas de vínculos dinámicos que van a la carpeta del sistema. El motivo es que si el estado de instalación del componente se establece en run-from-source siguiendo una característica o estableciendo en la interfaz de usuario, se producirían errores en las llamadas posteriores a LoadLibrary en el archivo DLL.
Consulte también control de los estados de selección de características.