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

Dateiüberschreibungsregeln / Key-Dateien ...


13 replies to this topic

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 04 October 2004 - 13:32

Hallo

ich bin neu hier...
wollte erstmal sagen, daß ich das Forum klasse finde...

EDIT: Sorry das Posting ist ziemlich lang geworden...bitte trotzdem lesen!

nun zu meinem Problem:

Fast alle Dateien meiner Installation habe KEINE Versionsnummer. Ich benutze statische Dateiverknüpfungen, die ich mit Hilfe des Komponenten-Assistenten automatisch erstellt habe (nach den "Best-Practise"-Regeln). Die Erstinstallation ist kein Problem... aber die Folgeinstallationen (Minor/Major-Upgrades, Patches) ist problematisch.
Ich habe mir die Dateiüberschreibungsregeln angeschaut: Da meine Dateien ja keine Versionsnummer besitzen und (hoffentlich) nicht auf dem PC des Anwenders verändert werden werden die Hash-Werte der Datein benutzt, um festzustellen, ob die Datei ersetzt werden soll. Außerdem habe ich gelesen, daß bei der Überschreibung von Datein immer nur die Key-Dateien untersucht werden. Wenn die Key-Datei NICHT ersetzt wird, werden die anderen Dateien (Companion-Dateien) dieser Komponente ebenfalls NICHT ersetzt, egal ob sie sich geändert haben oder nicht. Andersrum funktioniert es genauso: Wenn die Key-Datei ersetzt wird, werden auch die anderen (Nicht-Key-Dateien) ersetzt.
Und genau das ist mein Problem. Wenn sich eine meiner Companion-Dateien ändert, ist es möglich, daß die Datei bei der Installation nicht ersetzt wird, weil die Key-Datei dieser Komponente sich nicht geändert hat!!!!

Ich hätte gerne daß alle Dateien immer überschrieben werden oder daß MSI bei jeder Datei prüft, ob diese Datei ersetzt werden soll oder nicht.

Zuerst dachte ich ich könnte das Problem lösen in dem ich die Property REINSTALLMODE = a setze. Leider habe ich dann erfahren, daß Patches mit dieser Einstellung nicht mehr möglich sind, weil der Patch die ursprüngliche MSI-Datei verlangt. Heißt das, wenn ich auf Patches verzichten würde (als Minimallösung) könnte ich für Minor/Major-Upgrades mit REINSTALLMODE = a arbeiten...?

Gibt es für mein Problem eine Lösung (bei der auch Patches funktionieren)????


Die einzige Lösung, die mir eingefallen ist: Jede Datei als Key-Datei in einer eigene Komponente.

Das Problem dieser Lösung: Das Projekt besteht aus über tausend Dateien... Gibt es eine Möglichkeit mit InstallShield die Dateien auf diese Art (eine Datei pro Komponente) automatisch einzufügen oder muß ich jede Datei von Hand einfügen ???
Der Komponenten-Assistent fügt die Dateien immer nach den "Best-Practise"-Regeln ein.

Gibt es irgendeine Lösung für mein Problem??? Oder bin ich total auf dem Holzweg und es gibt eine ganz andere, bessere Lösung???? Bitte helft mir !!!!! Bin wirklich verzweifelt... !!!

Vielen Dank schonmal im Vorraus...

Edited by herrbecht, 04 October 2004 - 13:54.


ali

ali
  • Full Members
  • 1,008 posts

Posted 04 October 2004 - 13:55

du könntest ein Major Upgrade machen. Dann wird die alte Installation erst entfernt, dann die neue hininstalliert.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 October 2004 - 08:28

Um Missverständnisse zu vermeiden: so wie du es beschreibst handelt es sich nicht um Companion Dateien.
Jede Datei in eine eigene Komponente zu packen wäre tatsächlich eine Möglichkeit.
REINSTALLMODE a würde ich normalerweise nicht empfehlen, weil dann ALLE Dateien in deinem Setup neu installiert werden, also z.B. auch DLLs die du ins Windows verzeichnis installierst. Datei werden die Versionsregeln ignoriert, so dass es zu einem Downgrade kommen kann.
Ein Major Upgrade wäre eine saubere Lösumg.
Ein Tool zum Erzeugen von Komponenten steht unter http://www.installsi...reateComponents zum Download (seit ein paar Minuten)


herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 05 October 2004 - 10:05

Vielen Dank!!!!

das ist wirklich cool!!!! DANKE...

Ein Major-Upgrade ist natürlich eine gute Möglichkeit....
Das bei REINSTALLMODE a alle Dateien überschreiben werden (auch in Systemverzeichnissen) ist in meinem speziellen Fall nicht schlimmm, da außer einer ini-Datei im Windowsverzeichnis keine Dateien in solche Verzeichnisse geschrieben werden (die bisherige Installation (Skript) hat immer auch immer alles überschrieben). Das einzige Problem ist, das mit REINSTALLMODE a keine PATCHES möglich sind, die wir eigentlich benutzen wollten.

Mit Companion-Files meinte ich die Dateien, die bei statischer Dateiverknüpfung in einer Komponente sind und KEINE Key-Files sind. Sry, wenn ich die Begrifflichkeiten da nicht korrekt waren, hab das auch mehr aus dem Englischen übersetzt, und bei meinem Englischkenntnissen....;-)

Zu dem Tool habe ich eine Frage: Ich habe das jetzt extrahiert und versucht zu starten, aber es kommt eine Fehlermeldung: DLL nicht gefunden . Muß die Datei in einem bestimmten Verzeichnis stehen? oder was mache ich falsch???

Vielen Dank schonmal!!

Edited by herrbecht, 05 October 2004 - 10:06.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 05 October 2004 - 12:07

Der Begriff Companion bezeichnet eine Datei, bei der anstelle einer Versionsnummer ein Verweis auf eine andere Datei hinterlegt ist.
Auch mit REINSTALLMODE a sollte ein Patch möglich sein, allerdings wird bei der Installation dann das Original-Medium benötigt.
Das Tool benötigt das .NET Framework (getestet mit 1.1, weiss nicht ob es auch mit 1.0 funktionieren würde)

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 08 October 2004 - 13:41

Wirklich Vielen Dank für die Infos!!!!!

QUOTE (Stefan Krüger)
Auch mit REINSTALLMODE a sollte ein Patch möglich sein, allerdings wird bei der Installation dann das Original-Medium benötigt.


Hmm dazu habe ich noch ne Frage:
Das mit dem Original-Medium habe ich gelesen... Ich weiß aber nicht genau was das für mich bedeutet. Ich dachte immer MSI würde bei einer Installation die ganze Installation sowieso nochmal irgendwo auf der Festplatte ablegen, um das nachinstallieren, reparieren, etc zu ermöglichen. Dann wurde mir aber gesagt, daß es sich diese Version von dem Originak-Medium unterscheidet, da MSI einige Dateien löscht...

Wo stellt man eigentlich ein wo und ob überhaupt eine solche gecachte Version der Installation angelegt wird??? Hängt das von dem erstellten Medium ab (CD/Netzwerk/etc)

Was muß genau vorhanden sein, wenn man einen Patch mit REINSTALLMODE a ausführt?

Vielen Dank schonmal...

Edited by herrbecht, 08 October 2004 - 13:42.


herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 08 October 2004 - 14:42

Ich habe noch eine Frage... sorry (hab leider soooo viele Fragen... )
Gibt es ein Tool/Skript für Installshield X (Automation-Interface) mit dem ich bestimmte Dateien oder am besten gleich allen Dateien eine Version geben bzw die schon existierende Versionsnummer hochsetzten kann????

Der Grund warum ich frage ist folgender: Wie ich in meinem ersten Posting beschrieben habe, besitzen FAST alle meine zu installierenden Dateien KEINE Versionsnummer.. FAST:
In meinem Projekt gibt es ca. 40-50 Dateien mit Versionsnummer. Leider habe ich gerade erfahren, daß die Versionsnummern dieser Dateien NICHT hochgesetzt wird, wenn sich die Datei ändert! AArrrggg mad.gif
Ich könnte natürlich jetzt hingehen und bei jedem Release die Versionsnummer der betroffenen Dateien per Hand hochsetzten (Eigenschaften der Datei, "Systemversion außer Kraft setzen"). Das wäre jedoch eine aufwändige und fehleranfällige Handarbeit weil zu allem Überfluß die Dateien auch noch total verschiedene Versionsnummern haben (ich weiß das ist kurios blink.gif , da fragt man sich wer diese Versionsnummer hochgesetzt hat??? aber ich kann es nicht ändern... sad.gif )

Jetzt habe ich überlegt vllt gibt es ja ein tool für die Automation-Schnittstelle von Installshield, mit dem man sowas machen könnte.

Vllt wäre es bei meiner Situation auch intelligent (vorausgesetzt es gibt so ein tool) bei jedem Release einfach allen Dateien eine Version zu geben/hochzusetzen, dann hätte ich kein Problem mehr mit Dateiüberschreibungen (oder übersehe ich was hier) ??? Wenn man das machen würde, würde dann ein Patch sinnvoll funktionieren, oder würde er alle Dateien enthalten und somit sinnlos werden???? Da man ja glaube ich wählen kann, ob ein Patch nur ganze Dateien oder nur die wirklichen Unterschiede (auf bit-Ebene) enthält, müsste zu mindestens bei der letzten Möglichkeit ein Patch trotzdem funktionieren und nur die Unterschiede enthalten...oder???

Sorry für die vielen Fragen aber MSI treibt mich wirklich schon fast in den Wahnsinn...

Wäre wirklich nett, wenn mir jmd helfen könnte...

bin für jede Hilfe dankbar!!!!

Edited by herrbecht, 08 October 2004 - 14:54.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 08 October 2004 - 16:52

Also, eins nach dem anderen:
QUOTE
Wo stellt man eigentlich ein wo und ob überhaupt eine solche gecachte Version der Installation angelegt wird??? Hängt das von dem erstellten Medium ab (CD/Netzwerk/etc)

Windows Installer chacht nur die MSI Datenbank, nicht die Applikationsdateien. Daran ist nichts konfigurierbar. Wenn du eine selbstentpackende EXE erstellst (Typ Netzwerk, alles komprimieren, setup.exe erzeugen) dann kannst du optional die entpackten Dsteien (also dein komplettes Setup incl. Appplikationsdateien) auf dem Zielcomputer zurücklassen. Andernfalls wird der Anwender beim Update aufgefordert, die CD einzulegen.
QUOTE
Gibt es ein Tool/Skript für Installshield X (Automation-Interface) mit dem ich bestimmte Dateien oder am besten gleich allen Dateien eine Version geben bzw die schon existierende Versionsnummer hochsetzten kann????

InstallShield nimmt keine Änderungen an deinen Dateien vor, das musst du schon im Visual Studio oder wo immer du sie kompilierst machen.
Du kannst in er InstallShield Entwicklungsumgebung manuell Dateiversionen angeben, die von der tatsächlichen Version abweichen. Ob das auch über die Automatisierungsschnittstelle geht, weiss ich nicht. Schau mal in die Doku.
Das hat allerdings den Nachteil, dass es zu unnötigen Reparaturversuchen kommen kann, denn die Dateien auf dem zielcomputer sind ja immer "veraltet", also älter als das, was in der MSI Datei steht. Sie werden dann auch beim Update immer überschrieben, auch wenn sie eigentlich neuer sind als die Version die gerade installiert wird (Downgrade).
Das Hochzählen der Versionsnummer ist Sache der Entwickler. Sollst dein Setup vielleicht auch noch Bugs ind er Software beheben? mad.gif
Tools um die Versionsnummer einer Datei zu ändern gibt es bestimmt, such mal im Internet.

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 12 October 2004 - 18:11

Vielen Dank für die Antwort...

EDIT:SORRY für den langen Post, aber fiel mir schwer diese mysteriösen Phänomene kürzer zu beschreiben, bitte trotzdem lesen...thx

Das Problem sind die Dateien die eine Versionsnummer besitzen, die aber nicht hochgesetzt wird wenn die Datei sich ändert.

Ich habe das Patch'en mal ausprobiert und bin zu wirklich seltsamen Erkenntnissen gelangt:
Ich habe eine Version 1 erstellt und installiert. Anschließend habe ich ein Major-Upgrade erzeugt (Version 2) mit ein paar geänderten Dateien; darunter auch 2 Dateien, deren Versionsnummer gleichgeblieben ist (deren Inhalt sich aber geändert hat). Ich wählte (beim Major-Upgrade) die Einstellung:"Altes Setup vollständig deinstallieren, bevor neues Setup installiert wird".
Aus diesen beiden MSI-Files (Version 1 und Version 2) habe ich dann einen Patch erzeugt. Ich habe mir die Log-Datei der Patcherstellung angesehen um festzustellen, ob die geänderten Dateien mit der gleichgebliebenen Versionsnummer überhaupt im Patch enthalten waren (ich dachte vllt ignoriert MSI die Dateien bei der Patcherstellung, weil sich die Versionsnummer nicht geändert hat). Die Dateien waren in dem Patch enthalten, es wurde lediglich eine Warnung gegeben.

Hier ein Auszug:
CODE
WARNING (14): File versions are equal.  Upgraded: 'D:\Meine InstallShield-X-Projekte\WinAs-MSI-PATCHTEST_VERSION1\version2\version2_dbvzen\diskimages\disk1\.\program files\Dbv-Winterthur\WinAs\.\pdfprint.dll' ver=1.0.0.1;  Target: 'D:\Meine InstallShield-X-Projekte\WinAs-MSI-PATCHTEST_VERSION1\produktkonfiguration 1\version1_dbvzen\diskimages\disk1\.\program files\Dbv-Winterthur\WinAs\.\pdfprint.dll' ver=1.0.0.1.


Dann habe ich den Patch ausgeführt und alle Dateien waren danach auf dem aktuellen Stand. Auch das ezeugte Log zeigte dies:

CODE
(SERVER)     MSI (s) (7D:41): File: D:\Programme\Dbv-Winterthur\WinAs_PATCHTEST\pdfprint.dll; To be installed; Will patch; No existing file



danach habe ich das ganze mal mit einem Minor-Upgrade versucht und musste zu meiner Überraschung feststellen, daß die beiden Dateien mit den gleichgebliebenen Versionsnummern NICHT aktualisiert wurden. Diesmal las ich im LOG:

CODE
(SERVER)     MSI (s) (75:A7): File: D:\Programme\Dbv-Winterthur\WinAs_PATCHTEST_Minor\pdfprint.dll; Won't Overwrite; Won't patch; Existing file is of an equal version


Daraufhin habe ich nochmal einen Patch aus einem Major-Upgrade (und meiner Version 1) erzeugt und habe statt der Option "Altes Setup vollständig deinstallieren...." die Option :Setup installieren, und danach nicht benötigte Dateien entfernen" gewählt. Bei dieser Einstallung wurden die Dateien von dem Patch ebenfalls NICHT aktualisiert!!!

Diese Einstellung scheint den Unterschied zu verursachen. Wählt man bei dem Major-Upgrade: "Altes Setup vollständig deinstallieren...." und erzeugt daraus einen Patch, wird AUCH beim Patch die bisherige Installation erstmal gelöscht, und dann zusammen mit dem Patch neu installiert. Aus diesem Grund wird die versionierte Datei dann auch aktualisiert weil ja keine alte Datei vorhanden ist (LOG: To be installed; Will patch; No existing file).

Das ist seltsam, scheint aber ein Weg zu sein, mit einem Major-Upgrade Patches zu ermöglichen, oder ist daran irgendetwas faul????

Vielen Dank Schonmal!!!

Edited by herrbecht, 13 October 2004 - 08:29.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 12 October 2004 - 18:28

Deine beiden Quotes aus dem Log sind identisch.
Beim Patch wird normalerweise der REINSTALLMODE=omus verwendet, wobei o bedeutet, dass ältere (older) Dateien überschrieben werden sollen. Mit emus (e=equal) werden ältere or gleiche Versionen überschrieben.
Major Upgrades sollten normalerweise nicht als Patch verteilt werden.

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 13 October 2004 - 09:16

Hab die Quotes aus dem Log verbessert... sorry... war natürlich ein Fehler... ohmy.gif

Vielen Dank für die Infos... : REINSTALLMODE = emus das ist je eigentlich genau das was ich Suche... arrggh hab mir das Hilfe-Topic zu REINSTALLMODE schon ein paar mal angesehen... hatte allerdings total vergessen, daß es sowas wie "e" gibt... DANKE! Das funktioniert super: Logauszug (REINSTALLMODE=emus):
CODE
(SERVER)     MSI (s) (66:7B): File: D:\Programme\Dbv-Winterthur\PATCH_Minor_TEST\pdfprint.dll; Won't Overwrite; Will patch; Existing file is of an equal version

(In diesem Fall dürfte es ja auch keine Probleme geben wie bei REINSTALLMODE = a, ich meine das der Patch die Original-Installation verlangt?)


QUOTE
Major Upgrades sollten normalerweise nicht als Patch verteilt werden.


Hmm, wusste nicht das man das nicht soll.... gibts da eigentlich irgendwelche Nebenwirkungen ??? ... wäre gut zu wissen, weil ich das eigentlich schon vorhatte (hatte auch bei meinem Test keine Probs...).

Da ja in meinem Projekt ja jede Datei ihre eigene Komponente hat und Key-File ist muß ich (meines Erachtens) wenn eine Datei/Komponente wegfällt ein Major Upgrade machen. Und das würde ich auch gerne als Patch verteilen... (kommt wahrscheinlich häufiger vor)

Vielen Dank schonmal...

Edited by herrbecht, 13 October 2004 - 16:40.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 13 October 2004 - 17:11

Doch, auch bei "e" könnte es dazu kommen, dass das Originalmedium verlangt wird.
Das mit den Major Upgrade Patches ist nicht verboten, es passt nur eigentlich nicht si ganz ins Konzept, und manche Leute hatten schon Probleme damit.

herrbecht

herrbecht
  • Full Members
  • 59 posts

Posted 18 October 2004 - 11:51

QUOTE (Stefan Krueger @ 2004-10-13 17:11)
Doch, auch bei "e" könnte es dazu kommen, dass das Originalmedium verlangt wird.
Das mit den Major Upgrade Patches ist nicht verboten, es passt nur eigentlich nicht si ganz ins Konzept, und manche Leute hatten schon Probleme damit.

Danke für die Antwort....

Puuuuh ohmy.gif Bei mir hat das jetzt so funktioniert,.... die Installation hat auch nicht nach dem Originalmedium gefragt... hoffe das bleibt so....

Mit "e" ist es aber weniger wahrscheinlich oder? unsure.gif unsure.gif Ich meine, wenn man die anderen Dinge auch beachtet, die sich darauf auswirken können wie: (http://www.microsoft..._faq.mspx#ECAAA Abschnitt:Patching and Upgrades -> How can I prevent my patch from requiring the source? (sorry kann man leider nicht direkt linken... sad.gif ) ?

Vielen Dank schonmal...







Kai32

Kai32
  • Full Members
  • 19 posts

Posted 25 October 2004 - 15:15

QUOTE (Stefan Krueger @ 2004-10-05 07:28)
Ein Tool zum Erzeugen von Komponenten steht unter http://www.installsi...reateComponents zum Download (seit ein paar Minuten)

Hallo Stefan,
und wie mache ich das wenn ich nur ein Dev.9 habe ?

mfg
K.O.