Dela via


ICEM09

ICEM09 verifierar att sammanslagningsmodulen hanterar fördefinierade kataloger på ett säkert sätt. Det gör den genom att kontrollera att ingen komponent i modulen installerar en katalog i en fördefinierad systemkatalog, till exempel "ProgramFilesFolder" eller "StartMenuFolder". Moduler bör i stället använda kataloger med unika namn (skapade med namngivningskonventionen för sammanslagningsmodulen) och använda anpassade åtgärder för att rikta in sig på rätt målkatalog. Den här metoden förhindrar att moduler strider mot en befintlig katalogstruktur i den slutliga databasen. ICEM09 kontrollerar att de anpassade åtgärder som krävs för att den här tekniken ska fungera antingen inte finns (så att kopplingsverktyget kan generera dem) eller finns i rätt form (så att de fungerar som förväntat).

Om du inte åtgärdar en varning eller ett fel som rapporteras av ICEM09 kan det orsaka problem för klienterna i din sammanslagningsmodul. Katalogtabellrader med primära nycklar som ProgramFilesFolder finns ofta i en databas. Om komponenterna i modulen installeras direkt på fördefinierade kataloger som ProgramFilesFolder kan katalogposterna i modulen därför kollidera med redan befintliga rader. Det här villkoret skulle kräva att användaren av modulen delar upp källfilerna från modulen för att matcha den befintliga källkatalogen.

Resultat

ICEM09 rapporterar ett fel eller en varning när en modulkomponent installerar en katalog i en fördefinierad systemkatalog, vilket orsakar en möjlig namnkonflikt med den befintliga katalogstrukturen.

Exempel

ICEM09 publicerar följande varningar för en modul som innehåller de databasposter som visas.

Warning: The component 'Component1.<GUID>' installs directly into the pre-defined 
directory 'ProgramFilesFolder'. It is recommended that merge modules alias 
all such directories to unique names.

Byt namn på katalogen för sammanslagningsmodulen så att den inte matchar en Windows Installer-egenskap och därför är unik. Ange sedan en egenskap med samma namn till värdet för Katalogen Windows Installer. När katalogmatchningen sker har katalogen en egenskap med samma namn, så platsen för katalogens installation är värdet för egenskapen. Filer flyttas från den distinkta källplatsen till samma målplats. Den här processen bör helt ta bort sammanslagningskonflikterna.

Warning: The 'ModuleInstallExecuteSequence' table contains a type 51 action 
(StartMenuFolder.<GUID>) for a pre-defined directory, but this action 
does not have sequence number '1'

Om åtgärden inte har sekvensnummer 1 kanske den inte sammanfogas till måldatabasen tillräckligt tidigt i sekvensen för att fungera effektivt.

Åtgärda varningen genom att ange sekvensnumret till 1. Observera att de flesta aktuella sammanslagningsverktyg (men inte vissa äldre versioner) genererar dessa anpassade åtgärder vid sammanslagningstillfället, så det är inte alltid nödvändigt att uttryckligen skriva åtgärderna till sammanslagningsmodulen.

Warning: The 'CustomAction' table contains a type 51 action (MyAppDataFolderAction) 
for a pre-defined directory, but the name is not the same as the target directory. 
Many merge tools will generate duplicate actions."

Eftersom kolumnen CustomAction är den primära nyckeln i CustomAction-tabellen kan vissa kopplingsverktyg generera duplicerade åtgärder eftersom det fördefinierade åtgärdsnamnet skiljer sig.

Åtgärda varningen genom att namnge åtgärden på samma sätt som målkatalogen. Observera att de flesta aktuella sammanslagningsverktyg (men inte vissa äldre versioner) genererar dessa anpassade åtgärder vid sammanslagningstillfället, så det är inte alltid nödvändigt att uttryckligen skapa åtgärderna i sammanslagningsmodulen.

Katalogtabell

Katalog Directory_Parent DefaultDir
ProgramFilesFolder Katalog1 A
StartMenuFolder Katalog2 B:C
AppDataFolder Katalog3 D
MyPicturesFolder Katalog4 E

 

komponenttabell

Komponent Katalog
Komponent 1.<GUID-> ProgramFilesFolder
Komponent 2.<GUID-> StartMenuFolder
Komponent 3.<GUID-> AppDataFolder
Komponent 4.<GUID-> MyPicturesFolder

 

CustomAction Table

CustomAction Typ Källa Mål
StartMenuFolder.<GUID-> 51 StartMenuFolder.<GUID-> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID-> [AppDataFolder]

 

ModuleInstallExecuteSequence Table

Handling Sekvens BaseAction Efter Tillstånd
StartMenuFolder.<GUID-> 100

 

ICE-referens för sammanslagningsmodulen