Ejemplo de creación de paquetes únicos
PUASample.msi es un ejemplo de un paquete de Windows Installer 5.0 de propósito doble que es capaz de instalarse en el contexto de instalación por usuario o por máquina en Windows Server 2008 R2 y Windows 7. Este paquete de ejemplo sigue las directrices de desarrollo que se describen en Creación de paquetes únicos.
Obtención de una copia del ejemplo
Una copia de este ejemplo y un editor de tablas de base de datos de Windows Installer, Orca.exe, se encuentran en los componentes de Windows SDK para desarrolladores de Windows Installer. El ejemplo y el editor de tablas se incluyen en el kit de desarrollo de software de Windows para Windows Server 2008 R2 y Windows 7 como los archivos de instalación de Windows Installer PUASample1.msi y Orca.msi.
Requisitos del sistema
El editor de base de datos, Orca.exe, necesita Windows Server 2008 R2 (y versiones anteriores) y Windows 7 (y versiones anteriores). El paquete de propósito doble, PUASample1.msi, se puede instalar en el contexto de instalación por máquina o por usuario en Windows Server 2008 R2 y Windows 7. PUASample1.msi solo se puede instalar en el contexto por máquina en Windows Server 2008 y versiones anteriores y en Windows Vista y versiones anteriores. Puede instalar el editor de base de datos para examinar el contenido de PUASample1.msi sin que sea necesario instalar el ejemplo. Para instalar los paquetes del ejemplo o del editor, asegúrese de que la directiva DisableMSI no esté establecida en un valor que bloquee las instalaciones de aplicación.
Identificación de un paquete de propósito doble
Los paquetes de propósito doble deben inicializar el valor de la propiedad MSIINSTALLPERUSER en 1. Esto permite identificar que el paquete es capaz de instalarse en el contexto por máquina o por usuario en Windows Server 2008 R2 y Windows 7. Establezca la propiedad MSIINSTALLPERUSER en el paquete solo si se escribió según lo que indican las directrices de desarrollo descritas en Creación de paquetes únicos y si tiene previsto proporcionar a los usuarios la opción de instalar el paquete en el contexto por usuario o por máquina. Un paquete de propósito doble también debe inicializar el valor de la propiedad ALLUSERS en 2. Esto especifica que el contexto de instalación predeterminado para la aplicación es por usuario. Si el valor de la propiedad ALLUSERS es cualquier valor distinto de 2, Windows Installer omite la propiedad MSIINSTALLPERUSER.
Use un editor de base de datos de Windows Installer, como Orca.exe, para examinar el contenido de PUASample1.msi. La tabla Property del paquete de ejemplo contiene las dos entradas siguientes.
Tabla Property (parcial)
Propiedad | Value |
---|---|
ALLUSERS | 2 |
MSIINSTALLPERUSER | 1 |
Cuadro de diálogo personalizado para el contexto de instalación
La interfaz de usuario del paquete de ejemplo incluye un ejemplo de un cuadro de diálogo personalizado, VerifyReadyDialog, que permite a los usuarios seleccionar el contexto de instalación por usuario o por máquina en el momento de la instalación. La tabla Dialog contiene un registro que describe el cuadro de diálogo VerifyReadyDialog. El valor especificado en el campo de atributos es 39, porque este cuadro de diálogo usa los bits de estilo de diálogo msidbDialogAttributesVisible (1), msidbDialogAttributesModal (2), msidbDialogAttributesMinimize (4) y msidbDialogAttributesTrackDiskSpace (32). La barra de título del cuadro de diálogo muestra un título proporcionado por el valor de la propiedad ProductName.
Tabla Dialog (parcial)
Diálogo | HCentering | VCentering | Ancho | Alto | Atributos | Título | Control_First | Control_Default | Control_Cancel |
---|---|---|---|---|---|---|---|---|---|
VerifyReadyDialog | 50 | 50 | 480 | 280 | 39 | [ProductName] | InstallPerUser | Siguientes | Cancelar |
La tabla Control contiene entradas para los controles que el cuadro de diálogo VerifyReadyDialog muestra. El cuadro de diálogo muestra los controles PushButton y un control Text. Todos los controles usan los atributos de control msidbControlAttributesEnabled (2) y msidbControlAttributesVisible (1). El control InstallPerMachine también usa el atributo de control ElevationShield, msidbControlAttributesElevationShield (8388608). Este atributo de control agrega el icono de elevación (icono de escudo) Control de cuentas de usuario (UAC) al control InstallPerMachine e informa al usuario que se requieren las credenciales de UAC para instalar la aplicación en el contexto por máquina. El valor del campo Text de la tabla Control es el estilo del texto y el texto que el control muestra. Vea la descripción del campo Text en el tema relacionado con la tabla Control para más información sobre cómo agregar texto a un control mediante estilos predefinidos.
Tabla Control (parcial)
Dialog_ | Control | Tipo | Atributo | Texto | Control_Next |
---|---|---|---|---|---|
VerifyReadyDialog | Cancelar | PushButton | 3 | {\Tahoma10}&Cancelar | Siguientes |
VerifyReadyDialog | Anterior | PushButton | 3 | {\Tahoma10}<<&Anterior | Cancelar |
VerifyReadyDialog | Siguientes | PushButton | 3 | {\Tahoma10}&Siguiente >> | InstallPerUser |
VerifyReadyDialog | Text2 | Texto | 3 | ¿Está listo para completar la instalación suspendida? | |
VerifyReadyDialog | InstallPerUser | PushButton | 3 | {\Tahoma10}Instalar solo para &mí | InstallPerMachine |
VerifyReadyDialog | InstallPerMachine | PushButton | 8388611 | {\Tahoma10}Instalar para &todos | Anterior |
VerifyReadyDialog | Cancelar | PushButton | 3 | {\Tahoma10}&Cancelar | Siguientes |
La tabla ControlEvent especifica las acciones (ControlEvents) que el instalador lleva a cabo cuando el usuario interactúa con un control. Cuando un usuario activa el botón de comando InstallPerUser, la interfaz de usuario muestra un cuadro de diálogo OutOfDisk si la propiedad OutOfDiskSpace es 1, establece el valor de la propiedad MSIINSTALLPERUSER en 1, establece el valor de la propiedad ALLUSERS en 2, establece la propiedad MSIFASTINSTALL en 1, y devuelve un resultado. Dado que la propiedad MSIFASTINSTALL está establecida, no se genera ningún punto de restauración del sistema para la instalación. Cuando un usuario activa el botón de comando InstallPerMachine, la interfaz de usuario muestra un cuadro de diálogo OutOfDisk si la propiedad OutOfDiskSpace es 1, establece el valor de la propiedad ALLUSERS en 1, y devuelve un resultado.
Tabla ControlEvent (parcial)
Dialog_ | Control_ | Evento | Argumento | Condición | Pedido de |
---|---|---|---|---|---|
VerifyReadyDialog | InstallPerUser | SpawnDialog | OutOfDisk | OutOfDiskSpace = 1 | 1 |
VerifyReadyDialog | InstallPerUser | EndDialog | Valor devuelto | OutOfDiskSpace <> 1 | 5 |
VerifyReadyDialog | InstallPerUser | [MSIINSTALLPERUSER] | 1 | 1 | 2 |
VerifyReadyDialog | InstallPerUser | [ALLUSERS] | 2 | 1 | 3 |
VerifyReadyDialog | InstallPerMachine | SpawnDialog | OutOfDisk | OutOfDiskSpace = 1 | 1 |
VerifyReadyDialog | InstallPerMachine | EndDialog | Valor devuelto | OutOfDiskSpace <> 1 | 3 |
VerifyReadyDialog | InstallPerMachine | [ALLUSERS] | 1 | 1 | 2 |
VerifyReadyDialog | InstallPerUser | [MSIFASTINSTALL] | 1 | 1 | 4 |
El control InstallPerUser se debe quitar de la interfaz de usuario de cualquier instalación con una versión de Windows Installer anterior a Windows Installer 5.0. La tabla ControlCondition del paquete de ejemplo contiene cuatro entradas que deshabilitan y ocultan el control InstallPerUser si la versión actual es anterior a Windows Installer 5.0. La tabla usa el valor de la propiedad VersionMsi y la sintaxis de instrucciones condicionales para definir esta condición. La acción que se especifica en el campo Action solo se realiza si la instrucción del campo Condition tiene un valor true.
Tabla ControlCondition (parcial)
Dialog_ | Control_ | Acción | Condición |
---|---|---|---|
VerifyReadyDialog | InstallPerUser | Habilitar | VersionMsi >= "5.00" |
VerifyReadyDialog | InstallPerUser | Deshabilitar | VersionMsi < "5.00" |
VerifyReadyDialog | InstallPerUser | Mostrar | VersionMsi >= "5.00" |
VerifyReadyDialog | InstallPerUser | Ocultar | VersionMsi < "5.00" |
Especificación de una estructura de directorios
Use el editor de base de datos para examinar la tabla Directory de PUASample1.msi. El registro de la tabla Directory que tiene una cadena vacía en el campo Directory_Parent representa el directorio raíz de los árboles de directorio de origen y de destino. Si la propiedad TARGETDIR no está definida, el instalador establece su valor en el momento de la instalación en el valor de la propiedad ROOTDRIVE. Si la propiedad SourceDir no está definida, el instalador establece su valor en la ubicación del directorio que contiene el paquete de Windows Installer (archivo .msi). Los nombres de directorio se especifican con el formato corto|largo.
Tabla Directory (parcial)
Directorio | Directory_Parent | DefaultDir |
---|---|---|
TARGETDIR | SourceDir | |
ProgramFilesFolder | TARGETDIR | . |
ProgramMenuFolder | TARGETDIR | . |
INSTALLLOCATION | MyVendor | Sample1|MSDN-PUASample1 |
MyVendor | ProgramFilesFolder | Msft|Microsoft |
En el origen, esta tabla Directory se resuelve en las rutas de acceso de directorio siguientes.
- \[SourceDir\]\\Msft\\Sample1 \[SourceDir\]
En el destino, la tabla Directory se resuelve en las rutas de acceso que se muestran en la tabla siguiente. El instalador establece los valores de las propiedades ProgramFilesFolder y ProgramMenuFolder en ubicaciones que dependen del contexto de instalación y si el sistema es la versión de 32 bits o 64 bits de Windows Server 2008 R2 y Windows 7. Las rutas de acceso a las carpetas de destino dependen de si el usuario selecciona una instalación por usuario o por máquina.
Contexto de instalación | Sistema | Ejemplos de rutas de acceso |
---|---|---|
Por máquina | Windows Server 2008 R2 y Windows 7 Versión de 32 bits |
%ProgramFiles%\Msft\Sample1 %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs |
Por máquina | Windows Server 2008 R2 y Windows 7 Versión de 64 bits |
%ProgramFiles(x86)%\Msft\Sample1 %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs |
Por usuario | Windows Server 2008 R2 y Windows 7 Versión de 32 bits o 64 bits |
%USERPROFILE%\AppData\Local\Programs\Msft\Sample1 %APPDATA%\Microsoft\Windows\Start Menu\Programs |
Las aplicaciones por usuario se deben almacenar en subcarpetas en la carpeta Programas especificada por el valor de la propiedad ProgramFilesFolder. Por lo general, la ruta de acceso a la aplicación tiene el formato siguiente.
%LOCALAPPDATA%\Programs\Nombre del ISV\AppName.
Los datos de configuración por usuario se deben almacenar en la carpeta Programas especificada por el valor de la propiedad ProgramMenuFolder. Por lo general, esta carpeta se encuentra en la ruta de acceso siguiente.
%APPDATA%\Microsoft\Windows\Start Menu\Programs
Si instala componentes del paquete de Windows Installer de 32 bits, use las propiedades ProgramFilesFolder y CommonFilesFolder en la tabla Directory. Si instala componentes del paquete de Windows Installer de 64 bits, use las propiedades ProgramFiles64Folder y CommonFiles64Folder. Si la aplicación contiene versiones de 32 bits y 64 bits del mismo componente, con el mismo nombre, asegúrese de que estas versiones se guarden en directorios distintos o asígneles nombres diferentes.
En la tabla Directory siguiente, se proporciona un ejemplo de un diseño de directorio compatible con un paquete que incluye componentes de 32 y 64 bits e incluye algunos componentes que se comparten entre las distintas aplicaciones.
Directorio | Directory_Parent | DefaultDir |
---|---|---|
TARGETDIR | SourceDir | |
ProgramFilesFolder | TARGETDIR | .:Prog32 |
ProgramFiles64Folder | TARGETDIR | .:Prog64 |
CommonFilesFolder | TARGETDIR | .:Share32 |
CommonFiles64Folder | TARGETDIR | .:Share64 |
ProgramMenuFolder | TARGETDIR | .:Sample1|MSDN-PUASample1 |
INSTALLLOCATION | MyVendor | Sample1|MSDN-PUASample1 |
INSTALLLOCATIONX64 | Vendorx64 | Sample1|MSDN-PUASample1 |
SHAREDLOCATION | ShVendor | Sample1|MSDN-PUASample1 |
SHAREDLOCATIONX64 | ShVendorx64 | Sample1|MSDN-PUASample1 |
MyVendor | ProgramFilesFolder | Msft|Microsoft |
Vendorx64 | ProgramFiles64Folder | Msft|Microsoft |
ShVendor | CommonFilesFolder | Msft|Microsoft |
ShVendorx64 | CommonFiles64Folder | Msft|Microsoft |
Shrx86 | SHAREDLOCATION | x32|32-bit components |
Shrx64 | SHAREDLOCATIONX64 | x64|64-bit components |
Binx86 | INSTALLLOCATION | x32|32-bit components |
Binx64 | INSTALLLOCATIONX64 | x64|64-bit components |
App32 | Binx86 | myapp|unshared 32-bit components |
App64 | Binx64 | myapp|unshared 64-bit components |
Share32 | Shrx86 | shared|shared 32-bit components |
Share64 | Shrx64 | shared|shared 64-bit components |
En el origen, esta tabla Directory se resuelve en las rutas de acceso de directorio siguientes.
- \[SourceDir\]Prog32\\Msft\\Sample1\\x32\\myapp \[SourceDir\]Share32\\Common Files\\Msft\\Sample1\\x32\\shared \[SourceDir\]Prog64\\Msft\\Sample1\\x64\\myapp \[SourceDir\]Share64\\Common Files\\Msft\\Sample1\\x64\\shared \[SourceDir\]Sample1
En el destino, esta tabla Directory se resuelve en las rutas de acceso de directorio siguientes. Las rutas de acceso de destino dependen del contexto de instalación y del sistema.
Contexto de instalación | Sistema | Ejemplos de rutas de acceso |
---|---|---|
Por máquina | Windows Server 2008 R2 y Windows 7 Versión de 32 bits |
%ProgramFiles%\Msft\Sample1\x32\myapp %ProgramFiles%\Common Files\Msft\Sample1\x32\shared %ProgramFiles(x86)%\Msft\Sample1\x64\myapp %ProgramFiles(x86)%\Common Files\Msft\Sample1\x64\shared %ProgramData%\Microsoft\Windows\Start Menu\Programs\Sample1 |
Por máquina | Windows Server 2008 R2 y Windows 7 Versión de 64 bits |
%ProgramFiles(x86)%\Msft\Sample1\x32\myapp %ProgramFiles(x86)%\Common Files\Msft\Sample1\x32\shared %ProgramFiles%\Msft\Sample1\x64\myapp %ProgramFiles%\Common Files\Msft\Sample1\x64\shared %ProgramData%\Microsoft\Windows\Start Menu\Programs\Sample1 |
Por usuario | Windows Server 2008 R2 y Windows 7 Versión de 32 bits o 64 bits |
%LOCALAPPDATA%\Programs\Msft\Sample1\x32\myapp %LOCALAPPDATA%\Programs\Common\Msft\Sample1\x32\shared %LOCALAPPDATA%\Programs\Msft\Sample1\x64\myapp %LOCALAPPDATA%\Programs\Common\Msft\Sample1\x64\shared %APPDATA%\Microsoft\Windows\Start Menu\Programs\Sample1 |
Registro de la aplicación
PUASample.msi agrega una subclave a la clave del Registro AppPaths para la aplicación y realiza registros que permiten guardar la información de la aplicación en el Registro bajo esta clave. Para más información sobre las rutas de acceso y el registro de la aplicación, consulte PerceivedTypes, SystemFileAssociations y Registro de aplicación en la sección de extensibilidad de shell de la Guía del desarrollador de shell. En el momento de la instalación, el usuario toma la decisión de instalar la aplicación en el contexto de instalación por usuario o por máquina. En el momento de crear el paquete de propósito doble, el desarrollador del paquete no puede saber si los registros se deben realizar en las claves HKEY_LOCAL_MACHINE o HKEY_CURRENT_USER.
El desarrollador del paquete define el identificador de archivo del archivo ejecutable del campo File de la tabla File.
Tabla File (parcial)
Archivo | Component_ | FileName | FileSize | Versión | Idioma | Atributos | Secuencia |
---|---|---|---|---|---|---|---|
MyAppFile | ProductComponent | PUASAMP1.EXE|PUASample1.exe | 81920 | 0 | 1 |
Los valores que se van a guardar en el Registro se pueden especificar en el campo Value de la tabla Registry como una cadena Formatted. Use el identificador de archivo definido en el campo File de la tabla File, y la convención [#filekey] del tipo Formatted, para especificar el valor predeterminado de la clave del Registro AppPaths. La acción INSTALL de nivel superior realiza las acciones en la tabla InstallExecuteSequence. Una vez que se completan las acciones CostInitialize, FileCost e InstallFinalize de esta tabla, Windows Installer reemplaza la subcadena [#MyAppFile] con formato en la tabla Registry con la ruta de acceso completa al archivo de aplicación.
El ejemplo define una propiedad personalizada, RegRoot, para contener la ubicación de la clave raíz y usa una acción personalizada para restablecer el valor de propiedad si el usuario elige una instalación por máquina. Use la propiedad personalizada RegRoot en cualquier valor de cadena con formato que haga referencia a la ubicación raíz. En la tabla Property, el paquete PUASample.msi define la propiedad personalizada y establece el valor de RegRoot en HKCU. Esto inicializa el valor de la propiedad para el contexto de instalación por usuario, el contexto predeterminado recomendado para los paquetes de propósito doble.
Tabla Property (parcial)
Propiedad | Value |
---|---|
RegRoot | HKCU |
En la tabla CustomAction, el paquete define una acción personalizada denominada Set_RegRoot_HKLM. El valor del campo Type identifica esta acción como una acción personalizada estándar Tipo de acción personalizada 51. El significado de los campos Source y Target de la tabla CustomAction depende del tipo de acción personalizada. Para más información sobre los tipos estándar de acciones personalizadas, consulte Tipos de acciones personalizadas. El campo Source de la acción personalizada Set_RegRoot_HKLM especifica el valor de la propiedad RegRoot. Si el instalador lleva a cabo la acción personalizada Set_RegRoot_HKLM, restablece el valor de la propiedad RegRoot a HKLM.
Tabla CustomAction (parcial)
Acción | Tipo | Source | Destino |
---|---|---|---|
Set_RegRoot_HKLM | 51 | [RegRoot] | HKLM |
La acción INSTALL de nivel superior lleva a cabo las acciones en la tabla InstallExecuteSequence, en la secuencia que se especifica en el campo Sequence de dicha tabla. El valor creado en el campo Sequence para la acción personalizada Set_RegRoot_HKLM (1501) especifica que esta acción personalizada se debe realizar después de la acción InstallInitialize (1500) y antes de la acción ProcessComponents (1600.) Esta secuencia garantiza que el registro de la acción personalizada Set_RegRoot_HKLM se evalúa en el momento de la instalación. Para más información sobre la secuencia recomendada de acciones en la tabla InstallExecuteSequence, consulte el tema Suggested InstallExecuteSequence. La sintaxis de instrucciones condicionales creada en el campo Condition especifica que la acción Set_RegRoot_HKLM se va a realizar solo si el valor de la propiedad ALLUSERS se evalúa en 1 en el momento de la instalación. Un valor 1 en la propiedad ALLUSERS especifica una instalación por máquina.
Tabla InstallExecuteSequence (parcial)
Acción | Condición | Secuencia |
---|---|---|
Set_RegRoot_HKLM | ALLUSERS=1 | 1501 |
Los registros siguientes de la tabla Registry llevan a cabo los registros si está instalado el componente ProductComponent. Se requiere un valor -1 en el campo Root para llevar a cabo el registro en HKEY_LOCAL_MACHINE para una instalación por usuario y en HKEY_CURRENT_USER para una instalación por usuario. El registro con una cadena vacía en el campo Registry agrega una subclave para la aplicación en la clave del Registro AppPaths y establece el valor "(Default)" en la ruta de acceso completa del archivo ejecutable de la aplicación. El registro MyAppPathAlias asigna el archivo ejecutable a un alias de aplicación y permite que se inicie la aplicación si el usuario escribe el alias "puapct" en un símbolo de la línea de comandos. El registro MyAppPathRegistration asigna el nombre del archivo ejecutable a la ruta de acceso completa del archivo.
Registro | Root | Clave | Nombre | Value | Componente |
---|---|---|---|---|---|
-1 | Software\Microsoft\MyAppPathRegistrationLocation | [RegRoot]\Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe | ProductComponent | ||
MyAppPathAlias | -1 | Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe | [#MyAppFile] | ProductComponent | |
MyAppPathRegistration | -1 | Software\Microsoft\Windows\CurrentVersion\App Paths\PUASample1.exe | [#MyAppFile] | ProductComponent |
Registro de cancelación de reproducción automática
PUASample.msi lleva a cabo registros que permiten al usuario de la aplicación impedir que la Reproducción automática de hardware se inicie para los dispositivos seleccionados. Para información de cómo registrar un controlador para cancelar la reproducción automática en respuesta a un evento, consulte el tema Preparación de hardware y software para su uso con la Reproducción automática en la sección de extensibilidad de shell de la Guía del desarrollador de shell. El registro siguiente registra el controlador especificado en el campo Name cuando está instalado el componente ProductComponent. Se requiere un valor -1 en el campo Root para especificar en Windows Installer que el registro se debe redirigir a una ubicación que depende del contexto de instalación.
Tabla Registry
Registro | Root | Clave | Nombre | Value | Componente |
---|---|---|---|---|---|
MyAutoplayCancelRegistration | -1 | SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\CLSID | 66A32FE6-229D-427b-A608-D273F40C034C | ProductComponent |
Registro del controlador de vista previa
PUASample.msi lleva a cabo registros que son necesarios para instalar un controlador de vista previa que permite obtener una vista previa de solo lectura de los archivos .pua sin iniciar la aplicación. Para información de cómo registrar controladores de vista previa, consulte el tema Registro de controladores de vista previa en la sección de extensibilidad de shell de la Guía del desarrollador de shell. Los registros siguientes de la tabla Registry registran el controlador cuando esté instalado el componente ProductComponent. Se requiere un valor -1 en el campo Root para especificar en Windows Installer que el registro se debe redirigir a una ubicación que depende del contexto de instalación.
Tabla Registry
Registro | Root | Clave | Nombre | Value | Componente |
---|---|---|---|---|---|
MyPreviewHandlerRegistration1 | -1 | Software\Classes\.pua | puafile | ProductComponent | |
MyPreviewHandlerRegistration2 | -1 | Software\Microsoft\Windows\CurrentVersion\PreviewHandlers | {1531d583-8375-4d3f-b5fb-d23bbd169f22} | Microsoft Windows PUA TEST Preview Handler | ProductComponent |
MyPreviewHandlerRegistration3 | -1 | Software\Classes\puafile\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} | {1531d583-8375-4d3f-b5fb-d23bbd169f22} | ProductComponent | |
MyPreviewHandlerRegistration4 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} | Per-User Applicaton Sample 1 Preview Handler | ProductComponent | |
MyPreviewHandlerRegistration5 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} | AppID | {6d2b5079-2f0b-48dd-ab7f-97cec514d30b} | ProductComponent |
MyPreviewHandlerRegistration6 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} | DisplayName | @shell32,-38242 | ProductComponent |
MyPreviewHandlerRegistration7 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} | Icono | notepad.exe,2 | ProductComponent |
MyPreviewHandlerRegistration8 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 | ThreadingModel | Apartment | ProductComponent |
MyPreviewHandlerRegistration9 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 | #%%SystemRoot%\system32\shell32.dll | ProductComponent | |
MyPreviewHandlerRegistration10 | -1 | Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 | ProgID | puafile | ProductComponent |