Dela via


Redigeringsexempel för enskilt paket

Exempel PUASample.msi är ett exempel på ett Windows Installer 5.0-paket med dubbla syften som kan installeras i installationskontexten per användare eller per dator på Windows Server 2008 R2 och Windows 7. Det här exempelpaketet följer utvecklingsriktlinjerna som beskrivs i Redigering av enkla paket.

Hämta en kopia av exemplet

En kopia av det här exemplet och en Windows Installer-databastabellredigerare, Orca.exe, finns i Windows SDK-komponenter för Windows Installer Developers. Exempel- och tabellredigeraren medföljer Windows Software Development Kit för Windows Server 2008 R2 och Windows 7 som installationsfiler för Windows Installer PUASample1.msi och Orca.msi.

Systemkrav

Databasredigeraren Orca.exekräver Windows Server 2008 R2 och tidigare och Windows 7 och tidigare. Paketet med dubbla syften, PUASample1.msi, kan installeras i installationskontexten per dator eller per användare på Windows Server 2008 R2 och Windows 7. PUASample1.msi kan endast installeras i kontexten per dator på Windows Server 2008 och tidigare och Windows Vista och tidigare. Du kan installera databasredigeraren för att undersöka innehållet i PUASample1.msi utan att installera exemplet. Om du vill installera exempel- eller redigeringspaketen kontrollerar du att principen DisableMSI inte är inställd på ett värde som blockerar programinstallationer.

Identifiera ett Dual-Purpose-paket

Paket med dubbla syften bör initiera värdet för MSIINSTALLPERUSER egenskap till 1. Detta identifierar paketet som kapabelt att installeras i kontexten per dator eller per användare på Windows Server 2008 R2 och Windows 7. Ange egenskapen MSIINSTALLPERUSER i paketet endast om den har skrivits enligt utvecklingsriktlinjerna som beskrivs i single package authoring och om du tänker ge användarna möjlighet att installera paketet i antingen kontexten per användare eller per dator. Ett paket med dubbla syften bör också initiera värdet för egenskapen ALLUSERS till 2. Detta anger per användare som standardinstallationskontext för programmet. Om värdet för egenskapen ALLUSERS är något annat värde än 2 ignorerar Windows Installer egenskapen MSIINSTALLPERUSER.

Använd en Windows Installer-databasredigerare, till exempel Orca.exe, för att undersöka innehållet i PUASample1.msi. Tabellen Egenskap i exempelpaketet innehåller följande två poster.

Egenskapstabell (delvis)

Egenskap Värde
ALLUSERS 2
MSIINSTALLPERUSER 1

 

Anpassad dialogruta för installationskontext

Det användargränssnittet i exempelpaketet innehåller ett exempel på en anpassad dialogruta, VerifyReadyDialog, som gör att användarna kan välja installationskontexten per användare eller per dator vid installationen. Tabellen Dialog innehåller en post som beskriver dialogrutan VerifyReadyDialog. Värdet som anges i fältet Attribut är 39 eftersom den här dialogrutan använder msidbDialogAttributesVisible (1), msidbDialogAttributesModal (2), msidbDialogAttributesMinimize (4) och msidbDialogAttributesTrackDiskSpace (32) dialogformatbitar. Titelraden i dialogrutan visar en titel som anges av värdet för egenskapen ProductName.

dialogruta tabell (delvis)

Dialog HCentering VCentering Bredd Höjd Attribut Titel Control_First Standardkontroll Kontroll_Avbryt
VerifyReadyDialog 50 50 480 280 39 [ProductName] InstallPerUser Nästa Annullera

 

Tabellen för kontroll innehåller poster för kontroller som visas i dialogrutan VerifyReadyDialog. Dialogrutan visar PushButton--kontroller och en text--kontroll. Alla kontroller använder kontrollattributen msidbControlAttributesEnabled (2) och msidbControlAttributesVisible (1) . InstallPerMachine-kontrollen använder också kontrollattributet ElevationShield, msidbControlAttributesElevationShield (8388608.) Detta kontrollattribut lägger till User Account Control (sköldikon) till InstallPerMachine-kontrollen och informerar användaren om att UAC-uppgifter krävs för att installera programmet i hela datorns kontext. Värdet i fältet Text i tabellen Kontroll är textformatet och texten som visas av kontrollen. Mer information om hur du lägger till text i en kontroll med fördefinierade format finns i beskrivningen av fältet Text i tabellen Kontroll.

Control Tabell (delvis)

Dialog_ Kontroll Typ Attribut Text Kontroll_Nästa
VerifyReadyDialog Annullera Tryckknapp 3 {\Tahoma10}&Avbryt Nästa
VerifyReadyDialog Föregående Tryckknapp 3 {\Tahoma10}<<&Föregående Annullera
VerifyReadyDialog Nästa Tryckknapp 3 {\Tahoma10}&Nästa >> InstallPerUser
Verifieringsklar-dialog Text 2 Text 3 Är du redo att slutföra den pausade installationen?
VerifyReadyDialog InstallPerUser Tryckknapp 3 {\Tahoma10}Installera endast för &mig InstallPerMachine
VerifyReadyDialog InstallPerMachine Tryckknapp 8388611 {\Tahoma10}Installera för &alla Föregående
VerifyReadyDialog Annullera Tryckknapp 3 {\Tahoma10}&Avbryt Nästa

 

Tabellen ControlEvent anger ControlEventseller åtgärder som installationsprogrammet utför när användaren interagerar med en kontroll. När en användare aktiverar Pushbuttonen InstallPerUser, Användargränssnittet visar en dialogrutan OutOfDisk om egenskapen OutOfDiskSpace är 1, anger värdet för egenskapen MSIINSTALLPERUSER till 1, anger värdet för egenskapen ALLUSERS till 2, anger egenskapen MSIFASTINSTALL till 1. och returnerar . Eftersom egenskapen MSIFASTINSTALL har angetts genereras ingen systemåterställningspunkt för installationen. När en användare aktiverar push-knappen InstallPerMachine visar användargränssnittet en Dialogruta för OutOfDisk om egenskapen OutOfDiskSpace är 1, anger värdet för egenskapen ALLUSERS till 1 och returnerar.

ControlEvent Tabell (delvis)

Dialog_ Kontroll_ Händelse Argument Tillstånd Beställning
VerifyReadyDialog InstallPerUser SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
VerifyReadyDialog InstallPerUser Avsluta dialog Återvända OutOfDiskSpace <> 1 5
VerifyReadyDialog InstallPerUser [MSIINSTALLPERUSER] 1 1 2
VerifyReadyDialog InstallPerUser [ALLUSERS] 2 1 3
VerifyReadyDialog InstallPerMachine SpawnDialog OutOfDisk OutOfDiskSpace = 1 1
VerifyReadyDialog InstallPerMachine AvslutaDialog Återvända OutOfDiskSpace <> 1 3
VerifyReadyDialog InstallPerMachine [ALLUSERS] 1 1 2
VerifyReadyDialog InstallPerUser [MSIFASTINSTALL] 1 1 4

 

InstallPerUser-kontrollen bör tas bort från användargränssnittet för alla installationer med en tidigare Windows Installer-version än Windows Installer Windows Installer 5.0. Tabellen ControlCondition i exempelpaketet innehåller fyra poster som inaktiverar och döljer Kontrollen InstallPerUser om den aktuella versionen är mindre än Windows Installer 5.0. I tabellen används värdet för egenskapen VersionMsi och den villkorsstyrda instruktionens syntax för att definiera det här villkoret. Åtgärden som anges i fältet Åtgärd utförs endast om instruktionen i fältet Villkor är sant.

ControlCondition Tabell (partiell)

Dialog_ Kontroll_ Handling Tillstånd
VerifyReadyDialog InstallPerUser Möjliggöra VersionMsi >= "5,00"
VerifyReadyDialog InstallPerUser Inaktivera VersionMsi < "5.00"
VerifyReadyDialog InstallPerUser Visa VersionMsi >= "5,00"
VerifyReadyDialog InstallPerUser Göm VersionMsi < "5.00"

 

Ange katalogstruktur

Använd databasredigeraren för att undersöka tabellen Directory i PUASample1.msi. Posten i katalogtabellen med en tom sträng i sitt Directory_Parent-fält representerar rotkatalogen för både käll- och målkatalogträden. Om egenskapen TARGETDIR är odefinierad anger installationsprogrammet sitt värde vid installationen till värdet för egenskapen ROOTDRIVE. Om egenskapen SourceDir är odefinierad anger installationsprogrammet sitt värde till platsen för katalogen som innehåller Windows Installer-paketet (.msi fil.) Katalognamnen anges med formatet short|long.

Katalog Tabell (delvis)

Katalog Katalog_Förälder DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .
ProgramMenuFolder TARGETDIR .
INSTALLATIONSPLATS MyVendor Exempel 1|MSDN-PUASample1
MyVendor ProgramFilesFolder Msft|Microsoft

 

Vid källan löses den här Directory-tabellen upp till följande katalogsökvägar.

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

Vid målet matchas tabellen Directory till sökvägarna i följande tabell. Installationsprogrammet anger värdena för ProgramFilesFolder och ProgramMenuFolder egenskaper till platser som är beroende av installationskontext och om systemet är 32-bitars- eller 64-bitarsversionerna av Windows Server 2008 R2 och Windows 7. Sökvägarna till målmapparna beror på om användaren väljer en installation per användare eller per dator.

Installationskontext Systemet Exempelvägar
Per-Machine Windows Server 2008 R2 och Windows 7
32-bitarsversion
%ProgramFiles%\Msft\Sample1
%ALLUSERSPROFILE%\Microsoft\Windows\Start-menyn\Program
Per-Machine Windows Server 2008 R2 och Windows 7
64-bitarsversion
%ProgramFiles(x86)%\Msft\Sample1
%ALLUSERSPROFILE%\Microsoft\Windows\Start-menyn\Program
Per-User Windows Server 2008 R2 och Windows 7
32-bitars eller 64-bitars version
%USERPROFILE%\AppData\Local\Programs\Msft\Sample1
%APPDATA%\Microsoft\Windows\Start-menyn\Program

 

Program per användare ska lagras i undermappar under mappen Program som anges av värdet för egenskapen ProgramFilesFolder. Normalt har sökvägen till programmet följande formulär.

%LOCALAPPDATA%\Programs\ISV-namn\AppName.

Konfigurationsdata per användare ska lagras i mappen Program som anges av värdet för egenskapen ProgramMenuFolder. Den här mappen finns vanligtvis på följande sökväg.

%APPDATA%\Microsoft\Windows\Start-menyn\Program

Om du installerar 32-bitars Windows Installer Package-komponenter använder du egenskapen ProgramFilesFolder och CommonFilesFolder i tabellen Directory. Om du installerar 64-bitars Windows Installer Package-komponenter använder du egenskaperna ProgramFiles64Folder och CommonFiles64Folder. Om programmet innehåller 32-bitars- och 64-bitarsversioner av samma komponent, med samma namn, kontrollerar du att dessa versioner sparas i olika kataloger eller ger dem olika namn.

Följande tabell Directory innehåller ett exempel på en kataloglayout som är kompatibel med ett paket som innehåller 32-bitars- och 64-bitarskomponenter och innehåller vissa komponenter som delas mellan program.

Katalog Katalog_Förälder DefaultDir
TARGETDIR SourceDir
ProgramFilesFolder TARGETDIR .:Prog32
ProgramFiles64Folder TARGETDIR .:Prog64
Mapp för gemensamma filer TARGETDIR .:Share32
CommonFiles64Folder TARGETDIR .:Share64
ProgramMenuFolder TARGETDIR .:Sample1|MSDN-PUASample1
Installationsplats MyVendor Exempel 1|MSDN-PUASample1
Installationsplats X64 Vendorx64 Exempel 1|MSDN-PUASample1
Delad plats ShVendor Exempel 1|MSDN-PUASample1
SHAREDLOCATIONX64 ShVendorx64 Exempel 1|MSDN-PUASample1
MyVendor ProgramFilesFolder Msft|Microsoft
Vendorx64 ProgramFiles64Folder Msft|Microsoft
ShVendor Mappen för gemensamma filer Msft|Microsoft
ShVendorx64 CommonFiles64Folder Msft|Microsoft
Shrx86 DELAD PLATS x32|32-bitarskomponenter
Shrx64 SHAREDLOCATIONX64 x64|64-bit komponenter
Binx86 INSTALLATIONSPLATS x32|32-bitarskomponenter
Binx64 INSTALLLOCATIONX64 x64|64-bitarskomponenter
App32 Binx86 myapp|odelade 32-bitarskomponenter
App64 Binx64 myapp|icke-delade 64-bitarskomponenter
Dela 32 Shrx86 gemensamma|delade 32-bitarskomponenter
Share64 Shrx64 delade 64-bitarskomponenter

 

I källan matchas den här Directory--tabellen med följande katalogsökvägar.

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

Vid målet resulterar den här Directory-tabellen i följande katalogsökvägar. Målsökvägarna beror på installationskontexten och systemet.

Installationskontext System Exempelsökvägar
Per-Machine Windows Server 2008 R2 och Windows 7
32-bitarsversion
%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
Per-Machine Windows Server 2008 R2 och Windows 7
version för 64-bitars
%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
Per-User Windows Server 2008 R2 och Windows 7
32-bitars eller 64-bitars version
%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

 

Programregistrering

PUASample.msi lägger till en undernyckel till appsökvägarnas registernyckel för programmet och utför registreringar som gör att programinformation kan sparas i registret under den här nyckeln. Mer information om appsökvägar och programregistrering finns i avsnittet PerceivedTypes, SystemFileAssociations och Application Registration i shell-utökningsbarheten i Shell Developer's Guide. Vid installationen fattar användaren beslutet att installera programmet i installationskontexten per användare eller per dator. När paketet med dubbla syften har skapats kan paketutvecklaren inte veta om registreringarna ska utföras under HKEY_LOCAL_MACHINE eller HKEY_CURRENT_USER nycklar.

Paketutvecklaren definierar filidentifieraren för programmets körbara fil i fältet Arkiv i File Table.

fil tabell (delvis)

Fil Komponent_ Filnamn Filstorlek Version Språk Attribut Sekvens
MyAppFile Produktkomponent PUASAMP1.EXE|PUASample1.exe 81920 0 1

 

Värden som ska sparas i registret kan anges i fältet Värde i tabellen Registry som en formaterad sträng. Använd filidentifieraren som definierats i fältet Fil i tabellen File och [#filekey]-konventionen av den formaterade typen för att ställa in standardvärdet för registernyckeln App Paths. Åtgärden INSTALLERA på den översta nivån utför åtgärderna i tabellen InstallExecuteSequence. När CostInitialize, FileCostoch InstallFinalize åtgärder i den här tabellen har slutförts ersätter Windows Installer den formaterade delsträngen [#MyAppFile] i registertabellen med den fullständiga sökvägen till programfilen.

Exemplet definierar en anpassad egenskap, RegRoot, som ska innehålla rotnyckelns plats och använder en anpassad åtgärd för att återställa egenskapsvärdet om användaren väljer en installation per dator. Använd den anpassade egenskapen RegRoot i alla formaterade strängvärden som refererar till rotplatsen. I tabellen Egenskap definierar PUASample.msi-paketet den anpassade egenskapen och anger värdet för RegRoot till HKCU. Detta initierar värdet för egenskapen för installationskontexten per användare, den rekommenderade standardkontexten för paket med dubbla syften.

Egenskaper Tabell (delvis)

Egenskap Värde
RegRoot HKCU

 

I tabellen CustomAction definierar paketet en anpassad åtgärd med namnet Set_RegRoot_HKLM. Värdet i fältet Typ identifierar detta som en anpassad åtgärdstyp 51 standardanpassad åtgärd. Innebörden av fälten Källa och Mål i CustomAction-tabellen beror på den anpassade åtgärdstypen. Mer information om standardtyperna för anpassade åtgärder finns i anpassade åtgärdstyper. Fältet Källa för den anpassade åtgärden Set_RegRoot_HKLM anger värdet för egenskapen RegRoot. Om installationsprogrammet utför den Set_RegRoot_HKLM anpassade åtgärden återställs värdet för egenskapen RegRoot till HKLM.

CustomAction Tabell (partiell)

Åtgärd Typ Källa Mål
Set_RegRoot_HKLM 51 [RegRoot] HKLM

 

Åtgärden INSTALL på den översta nivån utför åtgärderna i tabellen InstallExecuteSequence i sekvensen som anges i fältet Sekvens i tabellen. Värdet som har skapats i fältet Sekvens för den anpassade åtgärden Set_RegRoot_HKLM (1501) anger att den här anpassade åtgärden ska utföras efter åtgärden InstallInitialize (1500) och före åtgärden ProcessComponents (1600.) Den här sekvensen säkerställer att posten för den Set_RegRoot_HKLM anpassade åtgärden utvärderas vid installationen. Mer information om den rekommenderade sekvensen med åtgärder i tabellen InstallExecuteSequence finns i avsnittet Suggested InstallExecuteSequence. Syntaxen för villkorsstyrd instruktion som har skapats i fältet Villkor anger att åtgärden Set_RegRoot_HKLM endast utförs om värdet för egenskapen ALLUSERS utvärderas till 1 vid installationen. Ett ALLUSERS- egenskapsvärde på 1 anger en installation per maskin.

InstallExecuteSequence Tabell (partiell)

Handling Tillstånd Sekvens
Set_RegRoot_HKLM ALLUSERS=1 1501

 

Följande poster i tabellen Registry utför registreringarna om ProductComponent-komponenten är installerad. Värdet -1 i fältet Rot krävs för att utföra registreringen under HKEY_LOCAL_MACHINE för en installation per användare och under HKEY_CURRENT_USER för en installation per användare. Posten med en tom sträng i fältet Register lägger till en undernyckel för programmet under AppPaths-registernyckeln och anger värdet "(Standard)" till den fullständiga sökvägen till programmets körbara fil. MyAppPathAlias-registreringen mappar den körbara filen till ett programalias och gör att programmet kan startas om användaren skriver aliaset "puapct" i en kommandotolk. MyAppPathRegistration-registreringen mappar namnet på den körbara filen till filens fullständiga sökväg.

Register Rot Nyckel Namn Värde Komponent
-1 Software\Microsoft\MyAppPathRegistrationLocation [RegRoot]\Software\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe Produktkomponent
MyAppPathAlias -1 Programvara\Microsoft\Windows\CurrentVersion\App Paths\PUAPCT.exe [#MyAppFile] Produktkomponent
MyAppPathRegistration -1 Programvara\Microsoft\Windows\CurrentVersion\App Paths\PUASample1.exe [#MyAppFile] Produktkomponent

 

Avregistrera AutoPlay

PUASample.msi utför registreringar som gör det möjligt för programanvändaren att förhindra Automatisk uppspelning av maskinvara från att starta för valda enheter. Information om hur du registrerar en hanterare för att avbryta automatisk uppspelning som svar på en händelse finns i avsnittet Förbereda maskinvara och programvara för användning med automatisk uppspelning i avsnittet shell-utökningsbarhet i Shell Developer's Guide. Följande post registrerar hanteraren som anges i fältet Namn när komponenten ProductComponent installeras. Värdet -1 i fältet Rot krävs för att ange för Windows Installer att registreringen ska omdirigeras till en plats som är beroende av installationskontexten.

Register Tabell

Register Rot Nyckel Namn Värde Komponent
MinAutospelAvbrytRegistrering -1 SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\CLSID 66A32FE6-229D-427b-A608-D273F40C034C Produktkomponent

 

Registrering av förhandsgranskningshanterare

PUASample.msi utför registreringar som krävs för att installera en förhandsgranskningshanterare som möjliggör en skrivskyddad förhandsversion av .pua-filer utan att starta programmet. Information om hur du registrerar förhandsgranskningshanterare finns i avsnittet Registering Preview Handlers i avsnittet shell extensibility i Shell Developer's Guide. Följande poster i tabellen Registry registrerar hanteraren när ProductComponent-komponenten installeras. Värdet -1 i fältet Rot krävs för att ange för Windows Installer att registreringen ska omdirigeras till en plats som är beroende av installationskontexten.

Registertabell

Register Rot Nyckel Namn Värde Komponent
MyPreviewHandlerRegistration1 -1 Software\Classes\.pua puafile Produktkomponent
MyPreviewHandlerRegistration2 -1 Software\Microsoft\Windows\CurrentVersion\PreviewHandlers {1531d583-8375-4d3f-b5fb-d23bbd169f22} Förhandsversionshanteraren för Microsoft Windows PUA TEST Produktkomponent
MyPreviewHandlerRegistration3 -1 Software\Classes\puafile\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} {1531d583-8375-4d3f-b5fb-d23bbd169f22} Produktkomponent
MyPreviewHandlerRegistration4 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} Per-User Applikation Exempel 1 Förhandsgranskningshanterare Produktkomponent
MyPreviewHandlerRegistration5 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} AppID {6d2b5079-2f0b-48dd-ab7f-97cec514d30b} Produktkomponent
MyPreviewHandlerRegistration6 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} Visningsnamn @shell32,-38242 Produktkomponent
MyPreviewHandlerRegistration7 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22} Ikon notepad.exe,2 Produktkomponent
MyPreviewHandlerRegistration8 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 ThreadingModel Lägenhet ProduktKomponent
MyPreviewHandlerRegistration9 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 #%%SystemRoot%\system32\shell32.dll Produktkomponent
MyPreviewHandlerRegistration10 -1 Software\Classes\CLSID\{1531d583-8375-4d3f-b5fb-d23bbd169f22}\InProcServer32 ProgID puafile Produktkomponent