Hallo zusammen,
ich bin vor kurzem von IS6 auf IS 11 German umgestiegen und gerade dabei unsere alten Projekte umzustellen.
Das zu installierende Programm ist eine MFC-Applikation und dementsprechend
müssen die MFC-Komponenten vom Setup mitinstalliert werden.
In der IS6 Version habe ich die notwendigen MFC-Dateien "per Hand" installiert,
in dem ich dafür eine spezielle Dateigruppe angelegt habe und diese mit allen
abhängigen Komponenten verknüpft habe. Das funktionierte prima.
Mit der Umstellung auf IS 11 (InstallScript) möchte ich die MFC-Komponenten per Merge-Module installieren.
Dazu habe ich ein spezielles unsichtbares Feature angelegt (MFC 6.0), die erforderlichen Merge-Module eingefügt
und dieses Feature bei der zu installierenden Hauptkomponente (Systemsoftware) als "erforderliches Feature" eingetragen.
Hier zum besseren Verständnis hier die Feature-Liste des Setups:
|-Systemsoftware
|-Konfiguration 1
|-Konfiguration 2
|-..
|-Konfiguration n
|-MFC 6.0 (unsichtbar)
..|-MFC Merge Module Holder
Bei "Systemsoftware" ist "MFC 6.0" als "erforderliches Feature" eingetragen,
bei den Konfiguration 1 bis n ist "Systemsoftware" als "erforderliches Feature" eingetragen.
Wenn also eine Konfiguration ausgewählt wird, wird also "Systemsoftware" und damit auch "MFC 6.0" installiert.
Soweit so gut. Das Problem ist aber die Reihenfolge der Installation!!!
In den Event-Handlern "OnInstalled" der Features "Konfiguration x" muss ich
bestimmte Dlls registrieren, die auch von der MFC anhängig sind.
Also muss gewährleistet sein, dass bei "OnInstalled", alle Abhängigkeiten auch
installiert sind. Das scheint aber nicht der Fall zu sein. InstallShield installiert
die Feature scheinbar immer entsprechend der festgelegten Reihenfolge in der
Feature-Liste, egal ob da irgendwelche Abhängigkeiten existieren oder nicht!
Im oben genannten Beispiel wird als das Feature "MFC 6.0" auch zuletzt installiert,
obwohl alle anderen Feature direkt bzw. indirekt davon abhängig sind!
Na gut, habe ich gedacht, dann setze ich das Feature "MFC 6.0" einfach an den Anfang (siehe Liste)
|-MFC 6.0 (unsichtbar)
..|-MFC Merge Module Holder
|-Systemsoftware
|-Konfiguration 1
|-Konfiguration 2
|-..
|-Konfiguration n
Dann wird "MFC 6.0" auch zuerst installiert und zuletzt deinstalliert. Aber
beim Deinstallieren gibt es ein Problem mit "Merge-Module Holder".
Dieser "Merge-Module Holder" managed die Installation der Merge-Module
und legt im Verzeichnis TARGETDIR ein Unterverzeichnis an, von dem aus
die Installation bzw. Deinstallation der Merge-Module gestartet wird.
Beim Deinstallieren der Anwendung, wird aber TARGETDIR nicht mehr gelöscht,
obwohl es leer ist! Der "Merge-Module Holder" hätte sich aber darum kümmern
müssen, oder?
Ich vermute, dass msiexec.exe noch offene Dateihandles hält, obwohl setup.exe bereits beendet wurde.
Jetzt meine Fragen:
Wie kann man sicherstellen, das bei der oben beschriebenen Setup-Struktur
(also 1.Feature mit "Merge-Modul Holder") das
Zielverzeichnis bei der Deinstallation auch korrekt gelöscht wird (ohne hartes löschen per Hand)?
Zu welchem Zeitpunkt kann man davon ausgehen, dass bei der Installation eines Features,
alle erforderlichen Abhängigkeiten installiert sind? Bei "OnInstalled" scheint das ja nicht der Fall zu sein!
Wie und wann macht den das Installshield bei der Registrierung von Komponenten,
die als "Selbstregistrierend" markiert sind und indirekt Abhängigkeiten zu anderen Features besitzen?
Vielleicht hat jemand ähnliche Erfahrungen gemacht?
Besten Dank und Gruss
Manfred
This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Problem bei der Deinstallation von Merge-Modulen
Started by
Mumpel
, Oct 10 2005 13:31
2 replies to this topic
Posted 11 October 2005 - 09:40
Wenn du schreibst "OnInstalled" meinst du dann den Feature_Installed Handler für das entsprechende Feature, oder das globale OnInstalled Event? Letzteres sollte eigentlich erst aufgerufen werden, wenn ALLE Dateien installiert sind.
Stefan Krüger
InstallSite.org twitter facebook
Posted 11 October 2005 - 10:21
Danke für die schnelle Reaktion.
Mit "OnInstalled" meinte ich den Feature_Installed Handler. Ich wusste garnicht,
dass es auch einen globalen "OnInstalled" Event Handler gibt!
Die Registrierung/Deregistrierung der Dlls habe ich in die "OnInstalled" bzw. "OnUninstalling" Handler gelegt, da es in
der Vergangenheit immer Probleme mit der Selbstregistrierungsfunktion von IS im Batch-Mode gab.
Ausserdem ist dann für mich die Fehlerbehandlung einfacher.
Gruss Manfred
Mit "OnInstalled" meinte ich den Feature_Installed Handler. Ich wusste garnicht,
dass es auch einen globalen "OnInstalled" Event Handler gibt!
Die Registrierung/Deregistrierung der Dlls habe ich in die "OnInstalled" bzw. "OnUninstalling" Handler gelegt, da es in
der Vergangenheit immer Probleme mit der Selbstregistrierungsfunktion von IS im Batch-Mode gab.
Ausserdem ist dann für mich die Fehlerbehandlung einfacher.
Gruss Manfred