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

Dynamische Berechnung des Speicherbedarfs


4 replies to this topic

Thomas Hübner

Thomas Hübner
  • Full Members
  • 25 posts

Posted 23 September 2009 - 12:37

Hallo,

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 wink.gif):
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

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 23 September 2009 - 14:31

QUOTE
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 könnte evtl. an der Art liegen, wie du den Pfad setzt. Einfaches Setzen des Properties reicht nach CostFinalize nicht. Verwendest du den Database-Auswahldialog von InstallShield? Der sollte es eigentlich richtig machen. Du könntest die Verzeichnisauswahl natürlich auch direkt im FeatureTree Dialog machen.

Das mit dem dynamischen Setzen der ReserveCost wird wohl nicht funktionieren. Vielleicht wäre es am einfachsten, du schreibst eine CA die nachschaut, ob im Zielverzeichnis schon eine DB liegt, berechnet wieviel Platz gebraucht wird, prüft ob genug Platz vorhanden ist und dann ein Property setzt über das der Out of Space Dalog angezeigt wird. Oder du machst das gleich nach der Auswahl des DB-Verzeichnisses, das wäre villeicht die nutzer-freundlichste Alternative.

Thomas Hübner

Thomas Hübner
  • Full Members
  • 25 posts

Posted 23 September 2009 - 14:51

QUOTE (Stefan Krueger @ 2009-09-23 14:31)
QUOTE
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 könnte evtl. an der Art liegen, wie du den Pfad setzt. Einfaches Setzen des Properties reicht nach CostFinalize nicht. Verwendest du den Database-Auswahldialog von InstallShield? Der sollte es eigentlich richtig machen. Du könntest die Verzeichnisauswahl natürlich auch direkt im FeatureTree Dialog machen.

Das mit dem dynamischen Setzen der ReserveCost wird wohl nicht funktionieren. Vielleicht wäre es am einfachsten, du schreibst eine CA die nachschaut, ob im Zielverzeichnis schon eine DB liegt, berechnet wieviel Platz gebraucht wird, prüft ob genug Platz vorhanden ist und dann ein Property setzt über das der Out of Space Dalog angezeigt wird. Oder du machst das gleich nach der Auswahl des DB-Verzeichnisses, das wäre villeicht die nutzer-freundlichste Alternative.

Hallo Stefan,

Ich verwende den Database-Auswahldialog von InstallShield. Nur habe ich ihn in der Sequenz hinter dem Feature-Auswahl-Dialog gesetzt. Er scheint nur nach den Dialogen CustomSetup bzw. SetupType, wenn die Server Komponente zur Installation ausgewählt wird.

Gerne möchte ich den OutOfSpace-Dialog nutzen, kurz bevor die Installation beginnt. Das Event für den Dialog ist ja bereits auf den Button "InstallNow" geleckt.

Nur weiß ich nicht, wie ich den Dialog erscheinen lassen kann, wenn der Platz nicht mehr ausreicht. Kann ich einfach das Property OutOfNoRbDiskSpace setzen? Aber im Dialog sollen ja auch die richtigen Werte angezeigt werden? Wie kann man diese dynamisch aktualisieren, falls das geht?

Viele Grüße
Thomas Hübner


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 September 2009 - 07:29

QUOTE
Kann ich einfach das Property OutOfNoRbDiskSpace setzen?

Du könntest die Bedingung um ein "Or DbOutOfDiskSpace" erweitern.

QUOTE
Wie kann man diese dynamisch aktualisieren, falls das geht?

Ich fürchte, das geht nicht.

Thomas Hübner

Thomas Hübner
  • Full Members
  • 25 posts

Posted 24 September 2009 - 09:40

QUOTE (Stefan Krueger @ 2009-09-24 07:29)
QUOTE
Kann ich einfach das Property OutOfNoRbDiskSpace setzen?

Du könntest die Bedingung um ein "Or DbOutOfDiskSpace" erweitern.

QUOTE
Wie kann man diese dynamisch aktualisieren, falls das geht?

Ich fürchte, das geht nicht.

Ich habe jetzt folgendes gemacht und es scheint zu funktionieren:

Eine CA wird nach CostFinalze aufgerufen, die folgendes macht:
  • Alle selbsteigetragenen temproräre Zeilenen in der Tabelle ReserveCost löschen
  • Im Verzeichnis DATABASEDIR schauen, ob es eine Datei volume.inf gibt. Diese auslesen und entsprechende neue Einträge in der der Tabelle ReserveCost hinzufügen
Der Aufruf wird nach CostFinalize gemacht, da erst dort der Wert von DATABASEDIR gesetzt wird und für den Fall der Benutzer behält die Standardeinstellungen.

Sollte dann der Standard-Path für DATABASEDIR geändert werden, wird die gleiche CA vom OK-Button im Dialog InstallChangeFolder als 1.Event aufgerufen (dabei ist die Bedingung auf _BrowseProperty = "DATABASEDIR" gesetzt).

Bisher scheint diese Methode zu funktionieren. Was mir aber aufgefallen ist, dass die Größe der Installation in der Systemsteuerung unter Software falsch angegeben ist. Die Installation installiert mit der Installation der Datenbank ca. 7,5 GB auf der Platte, welches auch korrekt während der Installation angezeigt wird. In der Systemsteuerung stehen aber nur 1,8 GB. Ohne die zusätzlichen Einträge in der Tabelle ReserveCost war es korrekt. Aber anscheinend hat man keinen Einfluß auf diese Angaben.