Creación de paquetes únicos

Un paquete de doble propósito es un paquete de Windows Installer 5.0 creado para poder instalar una aplicación en los contextos de instalación por usuario o por máquina. Los desarrolladores que usan un paquete de doble propósito para su aplicación pueden proporcionar a sus usuarios una opción de contexto de instalación en el momento de la instalación y pueden eliminar solicitudes de credenciales de UAC de instalaciones por usuario en Windows 7 o Windows Server 2008 R2. El desarrollo de un paquete de doble propósito de Windows Installer 5.0 para la instalación en Windows 7 y Windows Server 2008 R2 se conoce como creación de paquetes únicos.

Puede empezar a desarrollar paquetes de doble propósito para Windows 7 y Windows Server 2008 R2 mediante Windows Installer 5.0, la propiedad MSIINSTALLPERUSER, la propiedad ALLUSERS y las carpetas y registros conocidos por usuario de Windows Shell. Cuando Windows Installer 5.0 instala un paquete de doble propósito en el contexto por usuario en Windows 7 o Windows Server 2008 R2, el instalador dirige los archivos y las entradas del registro a ubicaciones por usuario y no solicita credenciales de UAC. Cuando Windows Installer 5.0 instala un paquete de doble propósito en el contexto por máquina, el instalador dirige los archivos y las entradas del registro a ubicaciones por máquina y solicita credenciales de UAC para confirmar que el usuario tiene privilegios suficientes para instalar software para todos los usuarios del equipo. Una vez que Windows Installer 5.0 instala una aplicación, usa el mismo contexto de instalación para todas las actualizaciones, reparaciones o eliminaciones posteriores de la aplicación.

Windows Installer 4.5 o versiones anteriores: la propiedad MSIINSTALLPERUSER y las versiones por usuario de las carpetas a las que hacen referencia las propiedades ProgramFilesFolder, CommonFilesFolder, ProgramFiles64Folder y CommonFiles64Folder no se admiten. Las carpetas FOLDERID_UserProgramFiles y FOLDERID_UserProgramFilesCommon están disponibles a partir de Windows 7 y Windows Server 2008 R2. Esto significa que las instalaciones desarrolladas para Windows Installer 4.5 o versiones anteriores dirigen los archivos y entradas del registro a FOLDERID_ProgramFiles, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesX64 y FOLDERID_ProgramFilesCommonX64. Dado que se trata de ubicaciones accesibles para otros usuarios del equipo, Windows Vista y los sistemas posteriores requieren la solicitud de credenciales de UAC.

Cuando un usuario instala un paquete de doble propósito creado para Windows Installer 5.0 con Windows Installer 4.5 o versiones anteriores, el instalador ignora la propiedad MSIINSTALLPERUSER. En este caso, la instalación puede dirigir los archivos y las entradas del registro a ubicaciones accesibles para otros usuarios y requerir que el sistema muestre solicitudes de credenciales de UAC. Windows Installer 5.0 puede instalar un paquete que se desarrolló para Windows Installer 4.5 o versiones anteriores, sin embargo, la instalación dirigirá los archivos y entradas del registro a ubicaciones accesibles para otros usuarios y es necesario que el sistema solicite credenciales de UAC.

Directrices de desarrollo

Siga las siguientes directrices de creación de paquetes únicos para asegurarse de que el paquete se puede instalar en el contexto por usuario o por máquina. Siga estas instrucciones para permitir que el usuario elija en el momento de la instalación una instalación por usuario o por máquina y para eliminar solicitudes de UAC de las instalaciones por usuario.

  • La instalación por usuario requiere Windows Installer 5.0 en Windows 7 o Windows Server 2008 R2. Debe informar al usuario de que el paquete admite la instalación por máquina de la aplicación en versiones anteriores del sistema.

  • Inicialice los valores de las propiedades ALLUSERS y MSIINSTALLPERUSER en la tabla de propiedades del paquete de doble propósito. Use un valor de ALLUSERS de 2 y un valor de MSIINSTALLPERUSER de 1 como valores iniciales. Esto especifica la instalación por usuario como valor predeterminado del paquete de doble propósito.

  • Considere la posibilidad de crear un cuadro de diálogo para la interfaz de usuario del paquete de doble propósito que permita al usuario elegir el contexto en el momento de la instalación. Cree los controles en este cuadro de diálogo personalizado para establecer los valores de las propiedades ALLUSERS y MSIINSTALLPERUSER. Para un valor de ALLUSERS de 2, establezca MSIINSTALLPERUSER en un valor de 1 para especificar una instalación por usuario y establezca MSIINSTALLPERUSER en una cadena vacía ("") para especificar una instalación por máquina. Los usuarios también pueden establecer ALLUSERS y MSIINSTALLPERUSER en la línea de comandos si instalan el paquete desde la línea de comandos.

  • Valide el paquete mediante evaluadores de coherencia interna: ICE. El paquete debe poder pasar la validación de ICE105 para ser un paquete de doble propósito válido.

  • Use la tabla de registro y la tabla RemoveRegistry para redirigir las entradas del registro a las partes por usuario del registro durante las instalaciones por usuario. En una instalación por usuario, las entradas del registro que tienen -1 en la columna Raíz se redirigen a HKEY_CURRENT_USER y, en una instalación por máquina, se dirigen a HKEY_LOCAL_MACHINE. En una instalación por usuario, las entradas del registro que tienen msidbRegistryRootClassesRoot (0) en la columna Raíz se redirigen a HKCU\Software\Clases y, en una instalación por máquina, se dirigen a HKLM\Software\Clases.

  • Use la propiedad ProgramFilesFolder de la tabla de directorios de paquetes de Windows Installer de 32 bits para especificar las ubicaciones de los directorios que contienen componentes de 32 bits no compartidos entre aplicaciones. Cuando un usuario instala el paquete de doble propósito mediante el contexto por máquina, estos componentes se guardan en la carpeta Archivos de programa en las versiones de 32 bits de Windows y en la carpeta Archivos de programa (x86) en las versiones de 64 bits del sistema. Todos los usuarios pueden acceder a los componentes de estos directorios. Cuando un usuario instala el paquete de doble propósito en Windows 7 o Windows Server 2008 R2 mediante el contexto por usuario, estos componentes se guardan en la carpeta Programs del usuario actual (por ejemplo, en %LocalAppData%\Programs) y solo ese usuario puede acceder a ellos.

  • Use la propiedad CommonFilesFolder de la tabla de directorios de paquetes de Windows Installer de 32 bits para especificar las ubicaciones de los directorios que contienen componentes de 32 bits compartidos entre aplicaciones. Cuando un usuario instala el paquete de doble propósito mediante el contexto por máquina, estos componentes se guardan en la carpeta Common Files y todos los usuarios pueden acceder a ellos. Cuando un usuario instala el paquete de doble propósito en Windows 7 o Windows Server 2008 R2 mediante el contexto por usuario, estos componentes se guardan en la carpeta Common del usuario actual (por ejemplo, en %LocalAppData%\Programs\Common) y solo puede acceder a ellos ese usuario.

  • Use la propiedad ProgramFiles64Folder de la tabla de directorios de paquetes de Windows Installer de 64 bits para especificar las ubicaciones de los directorios que contienen componentes de 64 bits no compartidos entre aplicaciones. Cuando un usuario instala el paquete de doble propósito mediante el contexto por máquina, estos componentes se guardan en la carpeta Archivos de programa. Todos los usuarios pueden acceder a los componentes de estos directorios. Cuando un usuario instala el paquete de doble propósito en Windows 7 o Windows Server 2008 R2 mediante el contexto por usuario, estos componentes se guardan en la carpeta Programs del usuario actual (por ejemplo, en %LocalAppData%\Programs) y solo ese usuario puede acceder a ellos. Para más información sobre cómo crear un paquete para instalar una aplicación en sistemas operativos de 64 bits, consulte Windows Installer en sistemas operativos de 64 bits.

  • Use la propiedad CommonFiles64Folder de la tabla de directorios de paquetes de Windows Installer de 64 bits para especificar las ubicaciones de los directorios que contienen componentes de 64 bits compartidos entre aplicaciones. Cuando un usuario instala el paquete de doble propósito mediante el contexto por máquina, estos componentes se guardan en la carpeta Common Files y todos los usuarios pueden acceder a ellos. Cuando un usuario instala el paquete de doble propósito en Windows 7 o Windows Server 2008 R2 mediante el contexto por usuario, estos componentes se guardan en la carpeta Common del usuario actual (por ejemplo, en %LocalAppData%\Programs\Common) y solo puede acceder a ellos ese usuario.

  • Utilice las propiedades ProgramFilesFolder y CommonFilesFolder de la tabla de directorios de Paquetes de Windows Installer de 64 bits para especificar la ubicación de los directorios que contienen componentes de 32 bits. Use nombres diferentes para las versiones de 32 y 64 bits de los componentes que se proporcionan con el mismo nombre, o bien, guarde las versiones en diferentes carpetas. Por ejemplo, agregue información a la tabla de directorios para especificar la ubicación del directorio que contiene la versión de 32 bits como [ProgramFilesFolder]\Nombre de ISV\Nombre de la aplicación\x86 y la ubicación del directorio que contiene la versión de 64 bits como [Program64FilesFolder]\Nombre de ISV\Nombre de la aplicación\x64. A continuación, una instalación por máquina guarda la versión de 32 bits en Archivos de programa(x86)\Nombre de ISV\Nombre de la aplicación\x86 y guarda la versión de 64 bits en Archivos de programa\Nombre de ISV\Nombre de la aplicación\x64. Una instalación por usuario guarda la versión de 32 bits en %LocalAppData%\Programs\Nombre de ISV\Nombre de la aplicación\x86 e instala la versión de 64 bits en %LocalAppData%\Programs\Nombre de ISV\Nombre de la aplicación\x64.

  • Almacene los datos de la configuración por usuario de la aplicación en \Users\nombreDeUsuario\AppData.

  • Almacene las plantillas y archivos generados por la aplicación en subcarpetas en \Users\nombreDeUsuario.

  • Si la aplicación usa extensiones de shell, debe usar los puntos de extensibilidad de shell compatibles con el usuario que están disponibles a partir de Windows 7 o Windows Server 2008 R2.

  • No use acciones personalizadas en el paquete que requieran privilegios elevados para ejecutarse. La tabla CustomAction no debe contener ninguna acción personalizada que se haya marcado para ejecutarse con privilegios elevados. Para más información sobre las acciones personalizadas con privilegios elevados, consulte Seguridad de acciones personalizadas.

  • No escriba en ninguna carpeta global del sistema. La tabla de directorios no debe contener referencias a ninguna de las siguientes propiedades de carpeta del sistema.

AdminToolsFolder
CommonAppDataFolder
FontsFolder
System16Folder
System64Folder
SystemFolder
TempFolder
WindowsFolder
WindowsVolume

Ejemplo

Se proporciona un ejemplo de un paquete de doble propósito en los componentes de Windows SDK para desarrolladores de Windows Installer en un archivo llamado PUASample1.msi. Si tiene el SDK actual, tiene acceso a todas las herramientas y datos necesarios para reproducir el paquete de instalación de ejemplo. Para más información sobre este ejemplo, consulte Ejemplo de creación de paquetes únicos.