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

Bedingte Installation von Components


6 replies to this topic

Marsyas

Marsyas
  • Full Members
  • 31 posts

Posted 12 January 2006 - 15:50

Hallo!

Ich würde gern ein Setup erstellen, mit dem mehrere (zusammen gehörige) Anwendungen installiert werden. Ich hab also die Anwendungen, mit anderen benötigten Files schön in Features (*) aufgeteilt, das Ganze sieht dann so aus:

* application1
- component1

* application2
- component2

* helpfiles
-component3 (Help-File für app1)
-component4 (Help-File für app2)
-component5 (sonstige Help-Files, werden immer installiert)

So, nun versuche ich, falls der User eine Installation der Help-Files wünscht, nur die Help Files passend zur jeweiligen Anwendung zu installieren. Falls der User nur app1 und nicht app2 und die Help-Files installiert, so soll er comp1, comp3 und comp5 bekommen.
Ich habe es mit den Conditions bei den Components versucht:

&app1=3 or (!app1=3 and not &app1=2)
oder einfach:
&app1=3

Aber das funktioniert nicht. Ich hab in der Online-Hilfe gelesen, dass diese conditional statements erst nach der CostFinalize Action den richtigen Wert besitzen. Ich hab das überprüft mit einer Message-Box (user32.dll, MessageBoxA als CustomAction), die mit den gleichen Conditions *nach* CostFinalize aufgerufen wird und es funkioniert richtig. Nur wenn App1 und die Hilfe ausgewählt ist (in beliebiger Reihenfolge), dann kommt die MessageBox. Weiterhin hab ich versucht MsiSetComponentState manuell aufzurufen, um den Status auf INSTALLSTATE_LOCAL zu setzen, aber das hat nicht funkioniert.

Kann mir bitte jemand sagen, wie ich die Components für die Help-Files automatisch installieren kann? Gibt es da vielleicht eine einfachere und schönere Lösung für ein solches Problem?

Danke im Voraus!

Gruß

Marsyas sad.gif

Edited by Marsyas, 12 January 2006 - 15:56.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 12 January 2006 - 16:20

Das Problem ist, dass die Bedingungen aber schon während CostFinalize ausgewertet werden.

Lege für die Hilfedateien (unsichtbare) Sub-Features an. Über die Control Events AddLocal bzw. Remove kannst du diese dann an- oder abwählen.

Marsyas

Marsyas
  • Full Members
  • 31 posts

Posted 12 January 2006 - 17:12

Ok, Vielen Dank erstmal. hab die Events zum Testen im Next-Button vom CustomSetup-Dialog eingebaut und das funktioniert (nachdem man natürlich die Conditions aus den Components wieder raus genommen hat ph34r.gif ).

Leider stellt mich die Lösung nicht so ganz zufrieden: Ich möchte ca. 10 Anwendungen installieren und hab deren Hilfedateien in 3 Sprachen, dazu muss ich für jede Anwendung und jede Sprache ein AddLocal oder Remove ausführen. Das bedeutet ich hab 10*3*2=60 Events im Next-Button. Außerdem ist die Lösung nicht sonderlich zukunftssicher, bei der nächsten Version darf ich dann nochmal etliche dutzende Events hinzufügen oder löschen. Gibt es auch noch eine andere Lösung? Properties in den Conditions der Components fallen aus den gleichen Gründen aus, wie meine erste Lösung, oder?

Vielen Dank für die schnelle Hilfe! rolleyes.gif

Gruß

Marsyas

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 16 January 2006 - 11:52

Du kannst natürlich stattdessen auch eine Custom Action verwenden, was das Problem aber im Prinzip nur verlagert. Allerdings kannst du in einer CA die Features evtl. über eine Schleife selektieren wenn du die Namen nach einem geeigeten Schema wählst.
Ist denn die Sprache ebenfalls vom Benutzer während der Installation wählbar? Oder nur am Beginn, zusammen mit der Sprache des Setup? In dem Fall könntest du alle Sprachen in einem gemeinsamen feature zusammenfassen und über die ProductLanguage filtern. Wenn die per setup.exe festegelegt wird, also noch bevor das eigentliche MSI-Setup startet, dann kannst du sie in Conditions verwenden.

Marsyas

Marsyas
  • Full Members
  • 31 posts

Posted 17 January 2006 - 11:46

Hallo Stefan,

ich hab es im Prinzip so umgesetzt, wie anfangs vorgeschlagen. Nur die ganze Eingabe der Conditions war etwas umständlich, das hab ich durch direktes Editieren der Projekt-Datei etwas vereinfacht.

Ich habe auch schon versucht, durch Gruppieren der Help-Files vielleicht weniger Aufwand bei der Selektion zu haben, allerdings ist es ein gewüschtes Feature, das der Admin während der Installation die Sprache der Helpfiles auswählen kann. Parallel dazu sollen halt die Help-Files für nicht installierte Features nicht installiert werden, so dass sich an der Zahl der versteckten Features nicht viel geändert hat.

Aber trotzdem recht herzlichen Dank für den Tipp und die schnelle Beantwortung der Frage!

Gruß

Marsyas tongue.gif

Marsyas

Marsyas
  • Full Members
  • 31 posts

Posted 12 May 2009 - 10:03

Hallo Stefan,

dieser Post ist zwar nicht gerade von gestern, trotzdem hab ich dazu noch eine Frage.

Wie bereits besprochen, füge ich jetzt mit AddLocal oder Remove die unsichtbaren Subfeatures hinzu. Im Prinzip funktioniert die Prozedur ganz gut, allerdings nur solange das Setup im Gui-Modus ausgeführt wird. Bei einer unattended Installation funktionert das natürlich nicht, weil die AddLocal und Remove-Funktionen nie aufgerufen werden.

Du hattest noch eine 2. Methode angesprochen, mittels einer CA. Wie würde ich das in etwa machen (also CA in VB-Script, direkt in C++, sonstiges)?

Eine Sprache ist im Setup nicht auswählbar, das Setup ist immer Englisch, ProductLanguage kann ich also leider nicht verwenden. Unser Produkt selbst ist mehrsprachig, für einige Hauptsprachen (Deutsch, English, Spanish, Französisch, Italienisch) gibt es die bereits erwähnten Hilfe-Dateien, die entsprechend zu installieren sind. Dabei sollen halt nur die Hilfe-Module der gewählten Sprache je nach ausgewählten Features installiert werden.

Grüße

Marsyas

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 13 May 2009 - 10:17

Im Silent-Fall kannst du auf der Kommandozeile ADDLOCAL bzw. REMOVE setzen.