Freigeben über


ICEM09

ICEM09 überprüft, ob das Seriendruckmodul vordefinierte Verzeichnisse sicher verarbeitet. Dadurch 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 Benennungskonvention für Seriendruckmodule) verwenden und benutzerdefinierte Aktionen verwenden, um auf das entsprechende Zielverzeichnis zu abzielen. Dieser Ansatz verhindert, dass Module mit einer vorhandenen Verzeichnisstruktur in der endgültigen Datenbank in Konflikt geraten. ICEM09 überprüft, ob die benutzerdefinierten Aktionen, die für diese Technik erforderlich sind, entweder nicht vorhanden sind (sodass das Seriendrucktool sie generieren kann) oder in der richtigen Form vorhanden ist (damit sie wie erwartet funktionieren).

Fehler beim Beheben einer Warnung oder eines fehlers, der von ICEM09 gemeldet wurde, kann für die Clients Ihres Seriendruckmoduls Probleme verursachen. Verzeichnistabellenzeilen mit Primärschlüsseln wie ProgramFilesFolder sind häufig in einer Datenbank vorhanden; Daher können die Verzeichniseinträge im Modul, wenn Komponenten in Ihrem Modul direkt in vordefinierte Verzeichnisse wie ProgramFilesFolder installiert werden, mit bereits vorhandenen Zeilen kollidieren. Diese Bedingung erfordert, dass der Benutzer Ihres Moduls die Quelldateien von Ihrem Modul aufteilen kann, um dem vorhandenen Quellverzeichnis zu 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 Seriendruckmodulverzeichnis um, sodass es nicht mit einer Windows Installer-Eigenschaft übereinstimmt und daher eindeutig ist. Legen Sie dann eine Eigenschaft mit demselben Namen auf den Wert des Windows Installer-Verzeichnisses fest. Wenn die Verzeichnisauflösung stattfindet, weist das Verzeichnis eine Eigenschaft mit demselben Namen auf, sodass der Installationsspeicherort des Verzeichnisses der Wert der Eigenschaft ist. Dateien werden vom unterschiedlichen Quellspeicherort an denselben Zielspeicherort verschoben. Dieser Vorgang sollte die Zusammenführungskonflikte vollständig entfernen.

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 keine Sequenznummer 1 hat, wird sie möglicherweise nicht früh genug in der Sequenz in die Zieldatenbank zusammengeführt, um effektiv zu arbeiten.

Um diese Warnung zu beheben, legen Sie die Sequenznummer auf 1 fest. Beachten Sie, dass die meisten aktuellen Zusammenführungstools (aber nicht einige ältere Versionen) diese benutzerdefinierten Aktionen zur Seriendruckzeit generieren. Daher ist es nicht immer erforderlich, die Aktionen explizit in das Seriendruckmodul 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 Zusammenführungstools möglicherweise doppelte Aktionen, da der Name der vorautoren Aktion anders ist.

Um diese Warnung zu beheben, geben Sie der Aktion denselben Namen wie das Zielverzeichnis. Beachten Sie, dass die meisten aktuellen Zusammenführungstools (aber nicht einige ältere Versionen) diese benutzerdefinierten Aktionen zur Seriendruckzeit generieren. Daher ist es nicht immer erforderlich, die Aktionen explizit in das Seriendruckmodul zu erstellen.

Verzeichnistabelle

Verzeichnis Directory_Parent DefaultDir
ProgramFilesFolder Verzeichnis1 Ein
StartMenuFolder Verzeichnis 2 B:C
AppDataFolder Verzeichnis3 D
MyPicturesFolder Directory4 E

 

Komponententabelle

Bestandteil Verzeichnis
Komponente1.<GUID-> ProgramFilesFolder
Komponente2.<GUID-> StartMenuFolder
Komponente3.<GUID-> AppDataFolder
Component4.<GUID-> MyPicturesFolder

 

CustomAction-Tabelle

CustomAction Art Quelle Ziel
StartMenuFolder.<GUID-> 51 StartMenuFolder.<GUID-> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID-> [AppDataFolder]

 

ModuleInstallExecuteSequence Table

Aktion Reihenfolge BaseAction Nach Zustand
StartMenuFolder.<GUID-> 100

 

Zusammenführen modul ICE Reference