Jump to content


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

Problem bei der Deinstallation von Merge-Modulen


2 replies to this topic

Mumpel

Mumpel
  • Members
  • 6 posts

Posted 10 October 2005 - 13:31

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



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

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.

Mumpel

Mumpel
  • Members
  • 6 posts

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