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

Component wird nicht vollständig installiert


7 replies to this topic

RobS

RobS
  • Members
  • 3 posts

Posted 04 October 2005 - 08:53

Komponenten sollen ja die atomaren Einheiten von MSI Installationen sein, in meinem Fall scheint da aber etwas nicht zu funktionieren.

Ich habe ein mit InstallShield X erstelltes reines MSI Setup.

Folgendes Szenario:

Auf dem Zielsystem sind eine dll und eine dazugehörige dll.lic Datei in einer alten Version vorhanden, diese sollen unter Anderem ersetzt werden. Die .dll.lic Datei ist die Lizenzdatei für die dll, ohne diese läuft das Programm nicht. Es ist daher wichtig, dass diese beiden Dateien immer zusammen installiert und überschrieben werden.

Ich hab daher beide Dateien in eine Komponente gepackt, und die dll zur Schlüsseldatei gemacht.

Nach meinem Verständnis sollten jetzt, wenn die DLL auf dem Zielsystem in einer alten Version vorhanden ist beide Dateien installiert werden.

Das funktioniert aber nur in der Hälfte der Fälle. Oft kommt es vor, dass zwar die dll überschrieben wird, aber die vorhandene dll.lic Datei nicht ersetzt wird. Folge: Das Programm läuft nicht weil dll und lic nicht zusammen passen.

Das Ganze ist sehr ärgerlich und ich wüsste gerne was denn an der Sache falsch läuft, das Problem tritt unabhängig von Betriebssystem oder Windows Installer Version auf, ich kann es nicht zuverlässig reproduzieren. Wie nach Zufall wird die lic Datei manchmal ersetzt und manchmal nicht.

Eine Reparaturinstallation funktioniert nach meinen Tests immer und überschreibt die lic Datei dann mit der richtigen. Aber es kann ja nicht im Sinne des Erfinders sein, dass der Anwender gleich nach der Installation eine Reparaturinstallation macht.

Die lic Datei ist übrigens im ASCII Format, und hat auf dem Zielsystem auch immer ein älteres Dateidatum als die Datei, die installiert werden soll, wobei das Datum in diesem Fall ja garnicht verglichen werden sollte wenn die Datei in einer Komponente mit der dll steckt und nicht Schlüsseldatei ist.

Das Verhalten so ist extrem lästig und ich bin für jede Idee und jeden Hinweis dankbar.

akerl

akerl
  • Full Members
  • 104 posts

Posted 04 October 2005 - 11:20

Deine Aussage ist nicht ganz korrekt. Grundsätzlich wird die Standardversionierungsregel für jede Datei innerhalb der Komponente angewendet, aber nur wenn die Key-Ressource ersetzt wird. In Deinem Fall wird also zunächst geprüft ob die Key-Ressource ersetzt werden muss. Ist dieses der Fall (da kleinere Version vorhanden) wird für die Lic-datei ebenfalls geprüft ob diese ersetzt werden muss. Hierbei wird es schwieriger da die .lic keine Version enthält. Also wird zunächst das Erstellungsdatum verglichen. Ist das identisch findet keine weitere Aktion statt. Ist es abweichend geht der MSI zunächst davon aus, dass die Datei geändert wurde. Da es jedoch möglich ist das Erstellungsdatum der Datei zu ändern ohne tatsächliche Änderungen an der Datei vorzunehmen verwendet der MSI in diesem Fall noch die Tabelle MsiFileHash. Ist dieser Hash abweichend interpretiert der MSI die datei als Benutzerdatei und wird Sie nicht überschreiben.
Du kannst mit zwei Lösungsansätzen arbeiten:
1. Holzhammer
Referenziere die .lic in der Tabelle RemoveFile. Leg die Attribute so fest, dass sie beim Installieren zunächst gelöscht wird.
2. Elegante
Konfiguriere die lic als Companion-File. Hierzu trägst Du den FTK (File Table Key) der .dll in die Versionsspalte der .lic. Weitere Infos findest Du unter http://msdn.microsof...anion_files.asp und http://msdn.microsof...oning_rules.asp.

- Andreas

Andreas Kerl

Inside Windows Installer 4.5
ISBN 3-86645-431-7


RobS

RobS
  • Members
  • 3 posts

Posted 04 October 2005 - 11:56

Danke erstmal für die schnelle Antwort.

Da hatte ich wohl ein falsches Verständnis, ich dachte wirklich, das setzen einer Key-Ressource in einer Komponente würde die Prüfung der anderen Dateien in der Komponente unterbinden.

Das mit den Companion Files sieht genau nach der Lösung aus die ich suche, werde das sofort ausprobieren.

-Robert

EDIT: Nach den ersten Versuchen scheint es zu funktionieren huh.gif

Vielen Dank für die Lösung, Thema ist damit wohl abgeschlossen

Edited by RobS, 04 October 2005 - 13:51.


Cybot

Cybot
  • Full Members
  • 29 posts

Posted 05 October 2005 - 17:25

Hi

QUOTE (akerl @ 2005-10-04 11:20)
...Ist dieser Hash abweichend interpretiert der MSI die datei als Benutzerdatei und wird Sie nicht überschreiben....

Das ist jetzt verwirrend, laut SDKs "Neither File Has a Version with File Hash Check" wird nicht kopiert, wenn der Hash gleich ist. Oder irre ich mich jetzt? Würde ja Sinn machen, wenn sich der Installer mit dem Hash das kopieren ersparen möchte. unsure.gif

Gruß
Cybot


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 06 October 2005 - 12:12

Soweit ich weiss, wird der Hash nur überprüft, wenn die Datei aufgrund des Datum überschrieben werden soll. Wenn der Hash gleich ist, wird sie nicht überschrieben (um den Kopiervorgang zu sparen).
Um den Datumsvergleich zu verdeutlichen (hier gibt es oft Missverständnisse): Windows Installer schaut sich NUR die VORHANDENE Datei an und vergleicht dort Erstell- und Änderungsdatum. Wenn die letzte Änderung nach dem Erstellen (also nach der Installation) erfolgt ist, dann wird die Datei nicht überschrieben, denn Windows Installer geht davon aus, dass der Benutzer die Datei geändert hat, und diese Änderungen sollen nicht weggeworfen werden.
Es spielt dabei keine Rolle, ob die Datei im Setup-Paket ein neuers oder älteres Datum hat. Das Datum wird in der .msi Datei auch gar nicht gespeichert.

Cybot

Cybot
  • Full Members
  • 29 posts

Posted 06 October 2005 - 17:11

Yep, so hab ich das auch verstanden. Ich war nur über die Aussage von Andreas gestolpert, was den Filehash angeht, dieses steht in den SDK nämlich anders.
Dann ist ja alles wieder fein biggrin.gif

Gruß
Cybot

RobS

RobS
  • Members
  • 3 posts

Posted 07 October 2005 - 07:49

Hmm diese .lic Dateien werden automatisch generiert und nie geändert.

Auf das Erstell- und Änderungsdatum hab ich allerdings noch nicht geachtet, also vom Erstelldatum muss die Datei im Setup immer jünger gewesen sein wenn der Fehler aufgetreten ist. Vielleicht haben die Leute ja wirklich was in der Datei geändert und die wurde deshalb nicht ersetzt, das wäre eine Spur.

Auf alle Fälle ist das Problem jetzt durch die Companion Files sowieso erledigt, da wird kein Datum mehr geprüft.

akerl

akerl
  • Full Members
  • 104 posts

Posted 07 October 2005 - 18:12

Ja, sorry dafür. War wohl etwas unglücklich ausgedrückt. Die Datei wird natürlich bei einem abweichenden Hash überschrieben.
- Andreas

Andreas Kerl

Inside Windows Installer 4.5
ISBN 3-86645-431-7