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

Unterschiede Windows Installer 2.x und 3.x


20 replies to this topic

danielsson

danielsson
  • Members
  • 21 posts

Posted 17 June 2005 - 14:42

Ich habe hier ein recht nerviges Problemchen. Ich habe ein Setup-Programm, welches unter anderem Registry-Einträge erstellt. Diese Komponente, die diese Einträge erstellt, hat keine Dateien (keine Einträge unter "Files"), sondern nur Registry-Einträge. Wenn ich nun das Produkt von 1.0.0 auf 1.0.1 patche (beispielsweise), so werden mit dem neuen Windows Installer 3.x zwar die (in anderen Komponenten) veränderten Dateien ausgetauscht, aber nicht die Registry-Einträge neu geschrieben (hier wird u.a. die Version der Applikation geschrieben). Mit dem Windows Installer 2.x funktioniert dies jedoch einwandfrei.

Dies scheint also einen Unterschied zwischen 2.x und 3.x auszumachen. Ich nehme an, dass sich das Problem dann erledigt, wenn ich eine sich zwischen den Versionen ändernde DLL (beispielsweise) in die Komponente lege, oder? Damit müsste er ja die Komponente auf jeden Fall anschauen, und damit auf die dazugehörigen Registry-Einträge neu schreiben, oder?

Eagle

Eagle
  • Full Members
  • 79 posts

Posted 20 June 2005 - 11:25

Hallo,

schon mal nachgeschaut, ob ein Registryeintrag, welcher sich ändert als KeyPath festgelegt wurde?


Ciao Thomas

danielsson

danielsson
  • Members
  • 21 posts

Posted 20 June 2005 - 11:51

Verzeihung: Hä?

danielsson

danielsson
  • Members
  • 21 posts

Posted 20 June 2005 - 13:48

Hm. Aha. Ok. Jetzt sehe ich: Da gibt es analog zu KeyFiles auch KeyPaths für die Registry...

danielsson

danielsson
  • Members
  • 21 posts

Posted 20 June 2005 - 14:27

Also: Nein, der Eintrag war nicht als Key Path deklariert. Es half aber auch nicht, dies fuer die naechste Version zu tun und zu hoffen, dass er sie patcht. Das ist naemlich nicht der Fall.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 20 June 2005 - 17:46

Nein, das hättest du gleich in der ersten Version machen müssen. Mit welcher Version von MSI 3.x testest du eigentlich?
- MSI 3.0
- MSI 3.1
- MSI 3.1 v2
Probiers mal mit der neuesten (MSI 3.1 v2). Ich glaube, das wurde genau wegen solcher Probleme nochmal was geändert gegenüber 3.0.

danielsson

danielsson
  • Members
  • 21 posts

Posted 21 June 2005 - 07:16

Ich teste mit 3.01.4000.1823, das dürfte die neuste Version sein. Ich habe diese Idee ja bereits verworfen, genau diese Komponente upgedatet haben zu wollen. Meine neue Idee war es nun, eine ganz neue Komponente einzuführen, die den Eintrag für mich schreiben soll. Jetzt kommen aber die nächsten Probleme: Diese Komponente wird beim Patchen gar nicht installiert. Der Log meldet lediglich

VersionRegistry: Install=Absent; Request=Null; Action=Null

Was mache ich denn jetzt falsch? Ich hatte bereits ganz früher solche Probleme, wenn ich Komponenten und/oder Features per CustomAction aktiviert oder deaktiviert habe. Dortmals hatte es etwas mit CostFinalize zu tun (musste nach "Remove" erfolgen). Kann das wieder etwas hiermit zu tun haben?

Windows Installer verhält sich irgendwie nicht richtig "intuitiv"... Man muss immer genau das richtige tun, sonst wird es immer falsch... :-(

danielsson

danielsson
  • Members
  • 21 posts

Posted 21 June 2005 - 09:26

Ich habe weitergeforscht, und bin auf das folgende gestoßen: Im Patching Log wird geschrieben, dass das Feature, in welches ich die neue Komponente eingefügt habe, als "Advertised" installiert ist. Dies stimmt aber sicher nicht! Das Feature ist sicherlich "Local" vorhanden. Woran kann dies liegen, dass das Feature "Advertised" ist? Ich meine sogar, dass ich das in DevStudio explizit verboten habe, und das Feature ist ein verstecktes Feature, das man auch nicht abwählen kann.

Grübel??! blink.gif

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 21 June 2005 - 11:07

Dann scahu mal, ob du im Log SELMGR Einträge findest. Vermutlich hast du eine Komponente aus einem Fetaure entfernt (bzw. die Komponenten-GUID geändert)

danielsson

danielsson
  • Members
  • 21 posts

Posted 21 June 2005 - 11:46

Nicht eigentlich. Aber es scheint irgendwas mit den MergeModulen zu sein, was ihm nicht gefällt...

MSI © (B4:90) [10:14:42:633]: SELMGR: Component 'Global_Controls_COMCATDLL.3207D1B0_80E5_11D2_B95D_006097C4DE24' is registered to feature 'Security_Feature', but is not present in the FeatureComponents table. Removal of components from a feature is not supported!
MSI © (B4:90) [10:14:42:633]: SELMGR: Removal of a component from a feature is not supported

Das Ding habe ich aber noch niemals dort gehabt. In dem Patch sollte es aber dort hinein. Irgendwas ist schief, irgendwas...

Gleichzeitig zeigt er auch das folgende an:

MSI (s) (90:58) [10:14:51:185]: Feature: Security_Feature; Installed: Advertise; Request: Reinstall; Action: Reinstall

Security_Feature ist aber sicherlich "Local", nicht "Advertised". Hängt aber wahrscheinlich mit der SELMGR-Meldung zusammen, oder?

danielsson

danielsson
  • Members
  • 21 posts

Posted 21 June 2005 - 13:10

Ich habe das Problem jetzt gelöst bekommen. Aber richtig gefallen tut's mir nicht. Das Problem war: Ich habe einem Merge-Modul gesagt, dass er eigentlich bei der Installation mehrerer Features sich installieren muss, nicht nur bei einem einzigen. Ich darf aber wohl für einen Patch dies nicht ändern (resultiert in obige Fehlermeldungen). Jetzt wird der Patch korrekt ausgeführt.

danielsson

danielsson
  • Members
  • 21 posts

Posted 28 June 2005 - 14:38

... und jetzt funktioniert's nicht mehr mit MSI 2.x. Das ist ja zum Mäuse melken.

Wenn MSI sich weigert zu patchen, was habe ich dann für einen Fehler gemacht? Es verhält sich sehr seltsam: Der Patch wird aufgerufen und scheinbar durchgeführt, wobei alles viel zu schnell läuft. Danach meldet Windows Installer Erfolg. Es wurde aber nichts gepatcht, und der Log verrät, dass zwar neue Komponenten erkannt wurden, diese aber nicht installiert werden (Installed:Absent; Action:Null). Auch bei allen anderen Komponenten erscheint, dass nichts getan wird (Action:Null). Schaue ich unter "Software" in der Systemsteuerung nach, so sehe ich, dass einige der Features als "Advertised" erscheinen, obwohl dies nicht der Fall ist. Setze ich dann alles auf "Lokal installieren", so wird alles bis auf die versteckten Features korrekt installiert.

Ich hatte mal den ReinstallMode auf "amus" im Patch-Fall gesetzt, ist das böse? Was könnte ich sonst falsch gemacht haben? Ich habe keine Komponenten gelöscht, nur in zwei Fällen ein KeyFile gegen ein anderes (mit einem anderen Namen) ausgetauscht.

danielsson

danielsson
  • Members
  • 21 posts

Posted 28 June 2005 - 15:30

Log des Patchvorgangs:
Patching Log

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 28 June 2005 - 18:02

QUOTE
der Log verrät, dass zwar neue Komponenten erkannt wurden, diese aber nicht installiert werden (Installed:Absent; Action:Null)

Wie sind die Angaben zu Installed, Request und Action bei den betroffenen Komponenten? Und um welche Komponenten handelt es sich?
QUOTE
einige der Features als "Advertised" erscheinen

Auch hier: welche Features? Sonst suche ich mir im Log den Wolf.

danielsson

danielsson
  • Members
  • 21 posts

Posted 29 June 2005 - 06:29

Die Features:

MSI (s) (20:2C): Doing action: InstallValidate
Aktion gestartet um 16:10:06: InstallValidate.
MSI (s) (20:2C): Feature: Publisher_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: CDPublisher_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: LECTURNITY_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Editor_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: StreamingMedia_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: RealMedia_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: WindowsMedia_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Assistant_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Player_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Flash_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: JRE_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: LSGC_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: PlayerHelp_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Security_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: Tutorial_Feature; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Feature: ppt2LECTURNITY_Feature; Installed: Local; Request: Null; Action: Null

Einige der Komponenten, da sieht es wie folgt aus:

MSI (s) (20:2C): Component: Assistant_TclEnc; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: __Player_StartmenuShortcut65; Installed: Null; Request: Null; Action: Null
MSI (s) (20:2C): Component: __CDPublisher_StartmenuShortcut65; Installed: Null; Request: Null; Action: Null
MSI (s) (20:2C): Component: __publisher.exe65; Installed: Null; Request: Null; Action: Null
MSI (s) (20:2C): Component: Assistant_Misc2; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: WmSysPrx.prx; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: filesdk.dll_Assistant_DEU; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: drawsdk.dll_ppt2LECTURNITY; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: ppt2LECTURNITY_gdiplus.dll; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: msvcp60.dll_Publisher; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: filesdk.dll_Publisher_DEU; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: VersionRegistry; Installed: Absent; Request: Null; Action: Null
MSI (s) (20:2C): Component: i18n.jar; Installed: Absent; Request: Null; Action: Null

Oder ganz typisch für Dateien, die eigentlich gepatcht werden müssten:

MSI (s) (20:2C): Component: mregutil.dll; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Component: nativeutils.dll; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Component: publisher.exe; Installed: Local; Request: Null; Action: Null
MSI (s) (20:2C): Component: publisher.jar; Installed: Local; Request: Null; Action: Null


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 29 June 2005 - 11:28

Ich sehe zwar das REINSTALLMODE Property, aber kein REINSTALL Property. Kann es sein, dass du vergessen hast, REINSTALL=ALL zu setzen? Das erledigt normalerweise der Next Button auf dem PatchWelcome Dialog.

danielsson

danielsson
  • Members
  • 21 posts

Posted 29 June 2005 - 12:48

Tja hm... irgendwo da liegt wohl tatsächlich der Hund begraben. Gebe ich msiexec.exe REINSTALL=ALL und REINSTALLMODE=omus mit, so funktioniert die Geschichte. Seltsam.

Vielen Dank.

danielsson

danielsson
  • Members
  • 21 posts

Posted 29 June 2005 - 16:16

Es scheint tatsächlich am fehlenden REINSTALL zu liegen. Nur ist mir ein Rätsel, wo es hingekommen ist? Im Willkommens-Dialog für Patches des Installers ist es vorhanden (DoAction "Reinstall", Paramater "ALL", Condition "PATCH"); frage ich aber dann "REINSTALL" ab, so ist der Inhalt leer ("").

Muss REINSTALL im Property Manager vorhanden sein? Wenn ja, welcher Wert muss darin enthalten sein? Wenn nein, wie fülle ich die Variable mit einem Wert, der stimmt?

danielsson

danielsson
  • Members
  • 21 posts

Posted 29 June 2005 - 16:37

user posted image

So sieht im Moment die Liste der Events für den Next-Knopf im Patch-Welcome-Dialog aus. In den ersten beiden Actions werden Conditions eingelesen, die ggf. den Installationsumfang beschränken; haben bisher immer tadellos funktioniert. Im DebugOutputReinstallMode lasse ich mir REINSTALL und REINSTALLMODE ausgeben, und diese sind jeweils "" und "omus".

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 04 July 2005 - 13:59

Was hat es mit dem DoAction CostFinalize auf sich? Funktioniert das ganze, wenn du diese Aktion entfernst (zum test: Condition auf 0 setzen)

danielsson

danielsson
  • Members
  • 21 posts

Posted 04 July 2005 - 14:06

Nein; wenn ich die entferne, dann werden neue Komponenten bei mir nicht installiert (MSI 2.x). Ich habe das Problem jetzt so "gelöst", dass ich als Aktion bei "Next" eine DLL mit einer CustomAction aufrufe, welche "REINSTALL" explizit auf "ALL" setzt. Einfach nur "Reinstall" "ALL" aufzurufen funktioniert nicht mit MSI 2.x. Oder ich habe irgendwas anderes vermurkst (will ich nicht ausschließen). Aber im Moment funktioniert es.