Esempio di creazione di singoli pacchetti

L'esempio PUASample.msi è un esempio di pacchetto windows Installer 5.0 a doppio scopo che è in grado di essere installato nel contesto di installazione per utente o per computer in Windows Server 2008 R2 e Windows 7. Questo pacchetto di esempio segue le linee guida per lo sviluppo descritte in Creazione di pacchetti singoli.

Recupero di una copia dell'esempio

Una copia di questo esempio e di un editor di tabelle di database di Windows Installer, Orca.exe, si trovano nei componenti di Windows SDK per sviluppatori di Windows Installer. L'editor di esempi e tabelle viene fornito con Windows Software Development Kit per Windows Server 2008 R2 e Windows 7 come file di installazione di Windows Installer PUASample1.msi e Orca.msi.

Requisiti di sistema

L'editor di database, Orca.exe, richiede Windows Server 2008 R2 e versioni precedenti e Windows 7 e versioni precedenti. Il pacchetto a doppio scopo, PUASample1.msi, può essere installato nel contesto di installazione per computer o per utente in Windows Server 2008 R2 e Windows 7. PUASample1.msi può essere installato solo nel contesto per computer in Windows Server 2008 e versioni precedenti e Windows Vista e versioni precedenti. È possibile installare l'editor di database per esaminare il contenuto di PUASample1.msi senza installare l'esempio. Per installare i pacchetti dell'esempio o dell'editor, verificare che il criterio DisableMSI non sia impostato su un valore che blocca le installazioni dell'applicazione.

Identificazione di un pacchetto a doppio scopo

I pacchetti a doppio scopo devono inizializzare il valore della proprietà MSIINSTALLPERU edizione Standard R su 1. Questo identifica il pacchetto come in grado di essere installato nel contesto per computer o per utente in Windows Server 2008 R2 e Windows 7. Impostare la proprietà MSIINSTALLPERU edizione Standard R nel pacchetto solo se è stata scritta seguendo le linee guida di sviluppo descritte in Creazione di pacchetti singoli e se si intende fornire agli utenti la possibilità di installare il pacchetto nel contesto per utente o per computer. Un pacchetto a doppio scopo deve anche inizializzare il valore della proprietà ALLU edizione Standard RS su 2. Specifica per utente come contesto di installazione predefinito per l'applicazione. Se il valore della proprietà ALLU edizione Standard RS è qualsiasi valore diverso da 2, Windows Installer ignora la proprietà MSIINSTALLPERU edizione Standard R.

Usare un editor di database di Windows Installer, ad esempio Orca.exe, per esaminare il contenuto di PUASample1.msi. La tabella Property nel pacchetto di esempio contiene le due voci seguenti.

Tabella delle proprietà (parziale)

Proprietà valore
ALLU edizione Standard RS 2
MSIINSTALLPERU edizione Standard R 1

 

Finestra di dialogo personalizzata per il contesto di installazione

L'interfaccia utente del pacchetto di esempio include un esempio di una finestra di dialogo personalizzata, VerifyReadyDialog, che consente agli utenti di selezionare il contesto di installazione per utente o per computer in fase di installazione. La tabella Dialog contiene un record che descrive la finestra di dialogo VerifyReadyDialog. Il valore immesso nel campo Attributi è 39 perché questa finestra di dialogo usa i bit di stile msidbDialogAttributesVisible (1), msidbDialogAttributesModal (2), msidbDialogAttributesMinimize (4) e msidbDialogAttributesTrackDiskSpace (32). Nella barra del titolo della finestra di dialogo viene visualizzato un titolo specificato dal valore della proprietà ProductName.

Tabella finestra di dialogo (parziale)

Dialog HCentering VCentering Larghezza Altezza Attributi Title Control_First Control_Default Control_Cancel
VerifyReadyDialog 50 50 480 280 39 [ProductName] InstallPerUser Avanti Annullamento

 

La tabella Control contiene voci per i controlli visualizzati dalla finestra di dialogo VerifyReadyDialog. Nella finestra di dialogo vengono visualizzati i controlli PushButton e un controllo Testo . Tutti i controlli usano gli attributi del controllo msidbControlAttributesEnabled (2) e msidbControlAttributesVisible (1). Il controllo InstallPerMachine usa anche l'attributo di controllo ElevationShield , msidbControlAttributesElevationShield (8388608.) Questo attributo di controllo aggiunge l'icona di elevazione dell'account utente (icona di schermata) al controllo InstallPerMachine e informa l'utente che le credenziali di Controllo dell'account utente sono necessarie per installare l'applicazione nel contesto per computer. Il valore nel campo Testo della tabella Control è lo stile di testo e il testo visualizzato dal controllo. Per altre informazioni sull'aggiunta di testo a un controllo tramite stili predefiniti, vedere la descrizione del campo Testo nell'argomento Tabella di controllo.

Tabella di controllo (parziale)

Dialogo_ Controllo Type Attributo Testo Control_Next
VerifyReadyDialog Annullamento Pulsante 3 {\Tahoma10}&Cancel Avanti
VerifyReadyDialog Precedente Pulsante 3 {\Tahoma10}<<&Precedente Annullamento
VerifyReadyDialog Avanti Pulsante 3 {\Tahoma10}&Next >> InstallPerUser
VerifyReadyDialog Text2 Testo 3 Sei pronto per completare l'installazione sospesa?
VerifyReadyDialog InstallPerUser Pulsante 3 {\Tahoma10} Installa solo per &me InstallPerMachine
VerifyReadyDialog InstallPerMachine Pulsante 8388611 {\Tahoma10} Installa per &Everyone Precedente
VerifyReadyDialog Annullamento Pulsante 3 {\Tahoma10}&Cancel Avanti

 

La tabella ControlEvent specifica gli eventi ControlEvent o le azioni eseguite dal programma di installazione quando l'utente interagisce con un controllo. Quando un utente attiva il pulsante di push InstallPerUser, l'interfaccia utente visualizza una finestra di dialogo OutOfDisk se la proprietà OutOfDiskSpace è 1, imposta il valore della proprietà MSIINSTALLPERU edizione Standard R su 1, imposta il valore della proprietà ALLU edizione Standard RS su 2, imposta la proprietà MSIFASTINSTALL su 1 e restituisce . Poiché la proprietà MSIFASTINSTALL è impostata, non viene generato alcun punto di ripristino di sistema per l'installazione. Quando un utente attiva il pulsante di push InstallPerMachine, l'interfaccia utente visualizza una finestra di dialogo OutOfDisk se la proprietà OutOfDiskSpace è 1, imposta il valore della proprietà ALLU edizione Standard RS su 1 e restituisce .

Tabella ControlEvent (parziale)

Dialogo_ Controllo_ Evento Argomento Condizione Ordinamento
VerifyReadyDialog InstallPerUser SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
VerifyReadyDialog InstallPerUser EndDialog Restituzione OutOfDiskSpace <> 1 5
VerifyReadyDialog InstallPerUser [MSIINSTALLPERU edizione Standard R] 1 1 2
VerifyReadyDialog InstallPerUser [ALLU edizione Standard RS] 2 1 3
VerifyReadyDialog InstallPerMachine SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
VerifyReadyDialog InstallPerMachine EndDialog Restituzione OutOfDiskSpace <> 1 3
VerifyReadyDialog InstallPerMachine [ALLU edizione Standard RS] 1 1 2
VerifyReadyDialog InstallPerUser [MSIFASTINSTALL] 1 1 4

 

Il controllo InstallPerUser deve essere rimosso dall'interfaccia utente di qualsiasi installazione usando una versione di Windows Installer precedente a Windows Installer Windows Installer 5.0. La tabella ControlCondition nel pacchetto di esempio contiene quattro voci che disabilitano e nascondono il controllo InstallPerUser se la versione corrente è minore di Windows Installer 5.0. La tabella usa il valore della proprietà VersionMsi e la sintassi dell'istruzione condizionale per definire questa condizione. L'azione specificata nel campo Azione viene eseguita solo se l'istruzione nel campo Condizione è true.

Tabella ControlCondition (parziale)

Dialogo_ Controllo_ Azione Condizione
VerifyReadyDialog InstallPerUser Abilitazione VersionMsi >= "5.00"
VerifyReadyDialog InstallPerUser Disabilita VersionMsi < "5.00"
VerifyReadyDialog InstallPerUser Mostra VersionMsi >= "5.00"
VerifyReadyDialog InstallPerUser Nascondi VersionMsi < "5.00"

 

Specifica della struttura di directory

Usare l'editor di database per esaminare la tabella Directory di PUASample1.msi. Il record della tabella directory con una stringa vuota nel campo Directory_Parent rappresenta la directory radice degli alberi delle directory di origine e di destinazione. Se la proprietà TARGETDIR non è definita, il programma di installazione imposta il valore in fase di installazione sul valore della proprietà ROOTDRIVE. Se la proprietà SourceDir non è definita, il programma di installazione imposta il relativo valore sul percorso della directory contenente il pacchetto windows Installer (file con estensione msi). I nomi di directory vengono specificati utilizzando il formato short|long.

Tabella directory (parziale)

Directory Directory_Parent DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .
ProgramMenuFolder TARGETDIR .
INSTALLLOCATION MyVendor Sample1|MSDN-PUASample1
MyVendor ProgramFilesFolder Msft |Microsoft

 

Nell'origine, questa tabella directory viene risolta nei percorsi di directory seguenti.

\[SourceDir\]\\Msft\\Sample1 \[SourceDir\]

Nella destinazione la tabella Directory viene risolta nei percorsi nella tabella seguente. Il programma di installazione imposta i valori delle proprietà ProgramFilesFolder e ProgramMenuFolder in percorsi che dipendono dal contesto di installazione e dal fatto che il sistema sia la versione a 32 bit o a 64 bit di Windows Server 2008 R2 e Windows 7. I percorsi delle cartelle di destinazione dipendono dal fatto che l'utente selezioni un'installazione per utente o per computer.

Contesto di installazione System Esempi di percorso
Per computer Windows Server 2008 R2 e Windows 7
Versione a 32 bit
%ProgramFiles%\Msft\Sample1
%ALLU edizione Standard RSPROFILE%\Microsoft\Windows\Menu Start\Programmi
Per computer Windows Server 2008 R2 e Windows 7
Versione a 64 bit
%ProgramFiles(x86)%\Msft\Sample1
%ALLU edizione Standard RSPROFILE%\Microsoft\Windows\Menu Start\Programmi
Per utente Windows Server 2008 R2 e Windows 7
Versione a 32 bit o a 64 bit
%U edizione Standard RPROFILE%\AppData\Local\Programs\Msft\Sample1
%APPDATA%\Microsoft\Windows\Menu Start\Programmi

 

Le applicazioni per utente devono essere archiviate in sottocartelle nella cartella Programmi specificata dal valore della proprietà ProgramFilesFolder. In genere, il percorso dell'applicazione assume il formato seguente.

%LOCALAPPDATA%\Programs\ISV name\AppName.

I dati di configurazione per utente devono essere archiviati nella cartella Programmi specificata dal valore della proprietà ProgramMenuFolder. In genere, questa cartella si trova nel percorso seguente.

%APPDATA%\Microsoft\Windows\Menu Start\Programmi

Se si installano componenti del pacchetto Windows Installer a 32 bit, utilizzare la proprietà ProgramFilesFolder e CommonFilesFolder nella tabella Directory. Se si installano componenti del pacchetto Windows Installer a 64 bit, utilizzare le proprietà ProgramFiles64Folder e CommonFiles64Folder. Se l'applicazione contiene versioni a 32 bit e a 64 bit dello stesso componente, con lo stesso nome, assicurarsi che queste versioni vengano salvate in directory diverse o assegnare nomi diversi.

La tabella Directory seguente fornisce un esempio di layout di directory compatibile con un pacchetto che include componenti a 32 bit e a 64 bit e include alcuni componenti condivisi tra applicazioni.

Directory Directory_Parent DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .:P rog32
ProgramFiles64Folder TARGETDIR .:P rog64
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 Componenti x32|32 bit
Shrx64 SHAREDLOCATIONX64 Componenti x64|64 bit
Binx86 INSTALLLOCATION Componenti x32|32 bit
Binx64 INSTALLLOCATIONX64 Componenti x64|64 bit
App32 Binx86 componenti myapp|unshared a 32 bit
App64 Binx64 myapp|Componenti a 64 bit non condivisi
Share32 Shrx86 componenti condivisi|condivisi a 32 bit
Share64 Shrx64 componenti condivisi|condivisi a 64 bit

 

Nell'origine, questa tabella directory viene risolta nei percorsi di directory seguenti.

\[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

Nella destinazione questa tabella directory viene risolta nei percorsi di directory seguenti. I percorsi di destinazione dipendono dal contesto di installazione e dal sistema.

Contesto di installazione System Esempi di percorso
Per computer Windows Server 2008 R2 e Windows 7
Versione a 32 bit
%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\Menu Start\Programmi\Sample1
Per computer Windows Server 2008 R2 e Windows 7
Versione a 64 bit
%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\Menu Start\Programmi\Sample1
Per utente Windows Server 2008 R2 e Windows 7
Versione a 32 bit o a 64 bit
%LOCALAPPDATA%\Programs\Msft\Sample1\x32\myapp
%LOCALAPPDATA%\Programmi\Common\Msft\Sample1\x32\shared
%LOCALAPPDATA%\Programmi\Msft\Sample1\x64\myapp
%LOCALAPPDATA%\Programmi\Common\Msft\Sample1\x64\shared
%APPDATA%\Microsoft\Windows\Menu Start\Programmi\Sample1

 

Registrazione dell'applicazione

PUASample.msi aggiunge una sottochiave alla chiave del Registro di sistema Percorsi app per l'applicazione ed esegue registrazioni che consentono di salvare le informazioni dell'applicazione nel Registro di sistema in questa chiave. Per altre informazioni sui percorsi dell'app e sulla registrazione dell'applicazione, vedere la sezione PerceivedTypes, SystemFileAssociations e Application Registration (Registrazione dell'applicazione) nella sezione relativa all'estendibilità della shell della Guida per sviluppatori della shell. Al momento dell'installazione, l'utente decide di installare l'applicazione nel contesto di installazione per utente o per computer. Al momento della creazione del pacchetto a doppio scopo, lo sviluppatore del pacchetto non può sapere se le registrazioni devono essere eseguite con le chiavi HKEY_LOCAL_MACHINE o HKEY_CURRENT_Uedizione Standard R.

Lo sviluppatore del pacchetto definisce l'identificatore di file per il file eseguibile dell'applicazione nel campo File della tabella file .

Tabella file (parziale)

file Componente_ FileName FileSize Versione Lingua Attributi Sequence
MyAppFile ProductComponent PUASAMP1.EXE|PUASample1.exe 81920 0 1

 

I valori da salvare nel Registro di sistema possono essere specificati nel campo Valore della tabella Del Registro di sistema come stringa formattata . Usare l'identificatore di file definito nel campo File della tabella File e la convenzione [#filekey] del tipo formattato per specificare il valore predefinito per la chiave del Registro di sistema Percorsi app. L'azione INSTALL di primo livello esegue le azioni nella tabella InstallExecuteSequence. Al termine delle azioni CostInitialize, FileCost e InstallFinalize in questa tabella, Windows Installer sostituisce la sottostringa formattata [#MyAppFile] nella tabella Registro di sistema con il percorso completo del file dell'applicazione.

L'esempio definisce una proprietà personalizzata, RegRoot, per contenere il percorso della chiave radice e usa un'azione personalizzata per reimpostare il valore della proprietà se l'utente sceglie un'installazione per computer. Usare la proprietà personalizzata RegRoot in qualsiasi valore stringa formattato che faccia riferimento alla posizione radice. Nella tabella Property il pacchetto PUASample.msi definisce la proprietà personalizzata e imposta il valore di RegRoot su HKCU. Inizializza il valore della proprietà per il contesto di installazione per utente, il contesto predefinito consigliato per i pacchetti a doppio scopo.

Tabella delle proprietà (parziale)

Proprietà valore
RegRoot HKCU

 

Nella tabella CustomAction il pacchetto definisce un'azione personalizzata denominata Set_RegRoot_HKLM. Il valore nel campo Tipo lo identifica come azione personalizzata tipo di azione personalizzata 51 standard. Il significato dei campi Origine e Destinazione nella tabella CustomAction dipende dal tipo di azione personalizzato. Per altre informazioni sui tipi standard di azioni personalizzate, vedere Tipi di azione personalizzati. Il campo Origine per l'azione personalizzata Set_RegRoot_HKLM specifica che il valore della proprietà RegRoot. Se il programma di installazione esegue l'azione personalizzata Set_RegRoot_HKLM, il valore della proprietà RegRoot viene reimpostato su HKLM.

Tabella CustomAction (parziale)

Azione Type Source Target
Set_RegRoot_HKLM 51 [RegRoot] HKLM

 

L'azione INSTALL di primo livello esegue le azioni nella tabella InstallExecuteSequence, nella sequenza specificata nel campo Sequenza di tale tabella. Il valore creato nel campo Sequenza per l'azione personalizzata Set_RegRoot_HKLM (1501) specifica che questa azione personalizzata deve essere eseguita dopo l'azione InstallInitialize (1500) e prima dell'azione ProcessComponents (1600). Questa sequenza garantisce che il record per l'azione personalizzata Set_RegRoot_HKLM venga valutato in fase di installazione. Per altre informazioni sulla sequenza consigliata di azioni nella tabella InstallExecuteSequence, vedere l'argomento Suggested InstallExecuteSequence . La sintassi dell'istruzione condizionale creata nel campo Condizione specifica che l'azione Set_RegRoot_HKLM deve essere eseguita solo se il valore della proprietà ALLU edizione Standard RS restituisce 1 al momento dell'installazione. Il valore della proprietà ALLU edizione Standard RS pari a 1 specifica un'installazione per computer.

Tabella InstallExecuteSequence (parziale)

Azione Condizione Sequence
Set_RegRoot_HKLM ALLU edizione Standard RS=1 1501

 

I record seguenti nella tabella Registry eseguono le registrazioni se è installato il componente ProductComponent. Il valore -1 nel campo Radice è necessario per eseguire la registrazione in HKEY_LOCAL_MACHINE per un'installazione per utente e in HKEY_CURRENT_Uedizione Standard R per un'installazione per utente. Il record con una stringa vuota nel campo Registro di sistema aggiunge una sottochiave per l'applicazione nella chiave del Registro di sistema AppPaths e imposta il valore "(Default)" sul percorso completo del file eseguibile dell'applicazione. La registrazione myAppPathAlias esegue il mapping del file eseguibile a un alias dell'applicazione e consente l'avvio dell'applicazione se l'utente digita l'alias "puapct" al prompt della riga di comando. La registrazione myAppPathRegistration esegue il mapping del nome del file eseguibile al percorso completo del file.

Registro Radice Key Nome valore Componente
-1 Software\Microsoft\MyAppPathRegistrationLocation [RegRoot]\Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe ProductComponent
MyAppPathAlias -1 Software\Microsoft\Windows\CurrentVersion\Percorsi app\PUAPCT.exe [#MyAppFile] ProductComponent
MyAppPathRegistration -1 Software\Microsoft\Windows\CurrentVersion\Percorsi app\PUASample1.exe [#MyAppFile] ProductComponent

 

Registrazione di annullamento autoPlay

PUASample.msi esegue registrazioni che consentono all'utente dell'applicazione di impedire l'avvio di Riproduzione automatica hardware per i dispositivi selezionati. Per informazioni sulla registrazione di un gestore per annullare la riproduzione automatica in risposta a un evento, vedere l'argomento Preparazione dell'hardware e del software per l'uso con AutoPlay nella sezione estendibilità della shell della Guida per sviluppatori della shell. Il record seguente registra il gestore specificato nel campo Name quando viene installato il componente ProductComponent. Il valore -1 nel campo Radice è necessario per specificare a Windows Installer che la registrazione deve essere reindirizzata a un percorso che dipende dal contesto di installazione.

Tabella del Registro di sistema

Registro Radice Key Nome valore Componente
MyAutoplayCancelRegistration -1 SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\CLSID 66A32FE6-229D-427b-A608-D273F40C034C ProductComponent

 

Registrazione del gestore di anteprima

PUASample.msi esegue registrazioni necessarie per installare un gestore di anteprima che consente un'anteprima di sola lettura dei file con estensione pua senza avviare l'applicazione. Per informazioni sulla registrazione dei gestori di anteprima, vedere l'argomento Registrazione dei gestori di anteprima nella sezione relativa all'estendibilità della shell della Guida per gli sviluppatori di Shell. I record seguenti nella tabella Registry registrano il gestore quando viene installato il componente ProductComponent. Il valore -1 nel campo Radice è necessario per specificare a Windows Installer che la registrazione deve essere reindirizzata a un percorso che dipende dal contesto di installazione.

Tabella del Registro di sistema

Registro Radice Key Nome valore Componente
MyPreviewHandlerRegistration1 -1 Software\Classes\.pua puafile ProductComponent
MyPreviewHandlerRegistration2 -1 Software\Microsoft\Windows\CurrentVersion\PreviewHandlers {1531d583-8375-4d3f-b5fb-d23bbd169f22} Gestore dell'anteprima di Microsoft Windows PUA TEST 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} Gestore anteprima per utente applicaton sample 1 (Anteprima) 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} Icon notepad.exe,2 ProductComponent
MyPreviewHandlerRegistration8 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 ThreadingModel Appartamento 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