Freigeben über


ICEM09

ICEM09 überprüft, ob das Mergemodul vordefinierte Verzeichnisse sicher verarbeitet. Dazu wird sichergestellt, dass keine Komponente im Modul ein Verzeichnis in einem vordefinierten Systemverzeichnis wie „ProgramFilesFolder“ oder „StartMenuFolder“ installiert. Stattdessen sollten Module Verzeichnisse mit eindeutigen Namen (erstellt mit der Namenskonvention für Mergemodule) und benutzerdefinierte Aktionen verwenden, um das entsprechende Zielverzeichnis als Ziel zu verwenden. Dieser Ansatz verhindert, dass Module mit einer vorhandenen Verzeichnisstruktur in der finalen Datenbank in Konflikt geraten. ICEM09 stellt sicher, dass die für diese Technik erforderlichen benutzerdefinierten Aktionen entweder nicht vorhanden sind (sodass das Mergetool sie generieren kann) oder in der richtigen Form vorhanden sind (damit sie wie erwartet funktionieren).

Wenn eine von ICEM09 gemeldete Warnung oder ein Fehler nicht behoben wird, kann dies zu Problemen für die Clients Ihres Mergemoduls führen. Verzeichnistabellenzeilen mit Primärschlüsseln wie „ProgramFilesFolder“ sind häufig in einer Datenbank vorhanden. Wenn Komponenten in Ihrem Modul direkt in vordefinierten Verzeichnissen wie „ProgramFilesFolder“ installiert werden, können daher die Verzeichniseinträge im Modul mit bereits vorhandenen Zeilen kollidieren. Diese Bedingung erfordert, dass der Benutzer Ihres Moduls die Quelldateien von Ihrem Modul abtrennt, sodass sie dem vorhandenen Quellverzeichnis entsprechen.

Ergebnis

ICEM09 meldet einen Fehler oder eine Warnung, wenn eine Modulkomponente ein Verzeichnis in einem vordefinierten Systemverzeichnis installiert, was zu einem möglichen Namenskonflikt mit der vorhandenen Verzeichnisstruktur führt.

Beispiel

ICEM09 veröffentlicht die folgenden Warnungen für ein Modul, das die angezeigten Datenbankeinträge enthält.

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.

Benennen Sie das Mergemodulverzeichnis um, damit es nicht mit einer Windows Installer-Eigenschaft übereinstimmt und somit eindeutig ist. Legen Sie dann eine Eigenschaft mit demselben Namen auf den Wert des Windows Installer-Verzeichnisses fest. Wenn die Verzeichnisauflösung erfolgt, verfügt das Verzeichnis über eine Eigenschaft mit demselben Namen, sodass der Installationsspeicherort des Verzeichnisses der Wert der Eigenschaft ist. Dateien werden vom eindeutigen Quellspeicherort an denselben Zielspeicherort verschoben. Durch diesen Prozess sollten Mergekonflikte vollständig vermieden werden.

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'

Wenn die Aktion nicht über die Sequenznummer 1 verfügt, wird sie möglicherweise nicht früh genug in der Sequenz mit der Zieldatenbank zusammengeführt, um effektiv zu funktionieren.

Um diese Warnung zu beheben, legen Sie die Sequenznummer auf 1 fest. Beachten Sie, dass die meisten aktuellen Mergetools (nicht jedoch einige ältere Versionen) diese benutzerdefinierten Aktionen zur Mergezeit generieren, sodass es nicht immer erforderlich ist, die Aktionen explizit im Mergemodul zu erstellen.

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."

Da die CustomAction-Spalte der Primärschlüssel der CustomAction-Tabelle ist, generieren einige Mergetools möglicherweise doppelte Aktionen, da sich der Name der vorab erstellten Aktion unterscheidet.

Um diese Warnung zu beheben, geben Sie der Aktion den gleichen Namen wie dem Zielverzeichnis. Beachten Sie, dass die meisten aktuellen Mergetools (nicht jedoch einige ältere Versionen) diese benutzerdefinierten Aktionen zur Mergezeit generieren, sodass es nicht immer erforderlich ist, die Aktionen explizit im Mergemodul zu erstellen.

Verzeichnistabelle

Verzeichnis Directory_Parent DefaultDir
ProgramFilesFolder Directory1 A
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

 

Komponententabelle

Komponente Verzeichnis
Component1.<GUID> ProgramFilesFolder
Component2.<GUID> StartMenuFolder
Component3.<GUID> AppDataFolder
Component4.<GUID> MyPicturesFolder

 

CustomAction-Tabelle

CustomAction type `Source` Ziel
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

ModuleInstallExecuteSequence-Tabelle

Aktion Sequenz BaseAction Nach Bedingung
StartMenuFolder.<GUID> 100

 

ICE-Referenz zum Mergemodul