Ich habe mal ein etwas komplizierteres Problem. "kompliziert", weil ich noch keine Lösung gefunden habe. Ich hoffe, das lässt sich lösen.
Hier das Problem (sorry, ist etwas viel Text ):
Wir haben eine Client/Server-Anwendung. Der Server verwendet die MaxDB als Datenbank, welche ich über eine CustomAction in einen VB Script installiere. Jetzt habe ich für eine einfache Installation den Plattenplatz der MaxDB in die Tabelle ReserveCost eingetragen.
Der Path für die MaxDB (im Property DATABASEDIR gespeichert) wird aber erst nach der Auswahl der Komponenten abgefragt. Es macht nämlich keinen Sinn, den Path anzugeben, wenn man nur den Client installieren möchte. Wenn der Benutzer den Path ändern sollte (z.B. auf ein anderes Laufwerk), so muss die Größe neu berechnet werden.
Bei meinen ersten Problem wird dies auch gemacht, was ich daran sehen, wenn ich zürück in den Dialog CustomSetup gehe und mir den Speicherdedarf anzeigen lasse. Wenn ich die Installation starte (Dialog ReadyToInstall), sollte defaultmäßig der Check auf OutOfNoRbDiskSpace durchgeführt werden und der Dialog OutOfSpace angezeigt werden, wenn der Platz nicht ausreicht. Eine Fehlermeldung poppt erst auf, wenn die Installation schon läuft.
Das zweite Problem ist, dass ich den Speicherbedarf für die MaxDB dynamisch bei der Auswahl den Pathes vergrößern möchte. Wenn der Benutzer bereits eine Installation hat und dort in der Datenbank zusätzliche Datenvolumes angelegt hat, wird diese Information in einer Datei volume.inf im Verzeichnis der Datenbanl (also DATABASEDIR) abgelegt und bleibt auch nach der Deinstallation vorhanden. Bei der Installation möchte ich jetzt diese Datei auswerten (falls vorhanden) und den Speicherbedarf für die MaxDB dynamisch erhöhen.
Sollte der Benutzer einen anderen Path wählen wollen, wo keine solche Datei liegt, muß der Platzbedarf erneut berechnet werden und nimmt wieder den Standardwert an.
Um diese Probleme zu lösen, habe ich zwei Lösungsansätze:
- In einer CA nach der Auswahl des Datenbankfolders prüfe ich, ob es eine volume.inf gibt. Falls ja, lese ich sie aus und füge temprär neue Zeilen in die Tabelle ReserveCost ein und lösche natürlich vorher die alten temprär hinzugefügten.
- Ich verwende Dummy Komponenten, die keine Dateien beinhalten, aber Eintrage in der Tabelle ReserveCost haben. Ebenfalls in einer CA nach der Auswahl des Datenbankfolders prüfe ich wieder die volume.inf und wähle automatisch die entsprechenden Dummy-Komponenten zur Installation aus.
Mein Problem ist in beiden Fällen die Neuberechnung des Speicherbedarfs. Die Aktionen finden alle nach CostFinalize statt, da sie auch von der Auswahl der Komponenten abhängig sind. Ich habe auch schon versucht, FileCost und CostFinalize erneut in meiner CA aufzurufen, hat aber nichts gebracht.
NAch der Auswahl des Datenbank-Folders kommt anschließend der ReadyToInstall Dialog. Beim Starten soll er mir dann anzeigen, ob der "neuberechnete" Speicherplatz ausreicht (also natürlich nur, wenn er nicht ausreicht).
Ist so etwas möglich, bzw. wie mache ich soetwas am geschicktesten?
Viele Grüße
Thomas Hübner