RSS
StartseiteKnowledge LibraryTop 10Impressum

11.6 Warum erfordert das Setup einen Neustart von Windows?

VB5-VB6

Von:  [Home]

Wenn Sie ein Setup mit dem Paket- und Weitergabe-Assistenten (PWA) erstellen, der mit VB geliefert wird, kommt es unter Umständen auf dem Zielrechner vor, dass der Setup- Loader zunächst einige Systemdateien aktualisieren muss, bevor das eigentliche Setup gestartet wird. Der Benutzer erhält dann folgende Meldung:

Setup kann nicht fortgesetzt werden, da einige Systemdateien
auf Ihrem System nicht mehr aktuell sind. [...]

Aktualisiert wird die OLE-Umgebung und die VB-Runtime (MSVBVMx0.DLL). Da die zugehörigen Dateien ständig in Gebrauch sind, zum Beispiel durch den Windows Explorer, können diese erst nach einem Neustart von Windows ersetzt werden. Normalerweise erfolgt dieser Vorgang problemlos und nach dem Neustart kann das eigentliche Setup gestartet werden.

Doch kommt es vor, dass die o.g. Meldung auch nach dem Neustart wieder und wieder erscheint, in diesem Fall konnten die erforderlichen Runtime-Dateien nicht ersetzt werden. Um die Ursache zu ermitteln, sollten Sie folgende Fragen klären:

  1. Welches VB Servicepack ist auf dem Entwicklungsrechner installiert?

    Hier sollte das aktuellste Servicepack vorhanden sein. Für VB6 ist dies SP 5 mind. aber SP4, für VB5 SP3.

    VB6 SP4 installiert drei Dateien in den Redist-Ordner (%VB-Verzeichnis% WizardsPDWizardRedist) des Paket- und Weitergabe-Assistenten (Olepro32.dll, Oleaut32.dll und Stdole2.tlb). Der PWA verwendet dann diese Datei-Versionen bei der Zusammenstellung des Setup-Pakets, statt der Dateien aus dem System-Verzeichnis.

    Hintergrund: Entwickelt man beispielsweise unter Windows Me, findet sich hier von Haus aus eine neuere Version der Oleaut32.dll, die dann vom PWA in das Setup-Paket eingebunden wird. Soll nun die Installation unter Windows 2000 erfolgen, versucht das Setup natürlich seine neuere Version zu installieren, was allerdings von der System File Protection (SFP) unterbunden wird. Diese stellt sofort wieder die Originaldatei her.

    Die Version der Oleaut32.dll des SP4 ist eine niedrigere, als die unter Windows 2000 vorhandene. Das Setup wird also nicht versuchen diese Datei zu ersetzen und kann erfolgreich die übrigen Runtime Dateien installieren.

    Gleiches gilt, wenn man unter Windows XP entwickelt und unter Windows Me/ Windows 2000 installieren will.

  2. Wird die Installation mit Administrationsrechten ausgeführt?

    Anders als bei Windows 95/98/Me, dürfen unter Windows NT/2000/XP nur Administratoren ins Windows-System32 Verzeichnis schreiben. Hier werden nicht nur die Runtime-Dateien abgelegt, sondern auch die mit VB gelieferten Zusatzsteuerelemente, wie die Windows Common Controls und das Common Dialog Control. Für ein erfolgreiches Setup sind also zwingend Administrationsrechte erforderlich. Siehe auch Punkt 3.

  3. Gibt es auf dem Zielrechner evtl. eine Batch-Prozedur oder ein Programm, welches nach jedem Systemstart das Temp-Verzeichnis löscht?

    Wenn ja, so sollten diese Batch-Prozeduren oder Programme zumindest während des Installationsprozesses abgestellt werden.

    Hintergrund: Das Setup muss ggf. Dateien ersetzen, die zum Zeitpunkt der Installation durch andere Anwendungen in Verwendung sind. Diese Dateien können nur bei einem Neustart des Systems ausgetauscht werden. Dazu kopiert das Setup die betreffenden Dateien in das Temp-Verzeichnis und weist Windows an diese Dateien beim nächsten Systemstart zu ersetzen. Diese Anweisung erfolgt unter Windows NT/2000/XP über die API Funktion MoveFileEx, wobei in der Registrierung unter:

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
    ManagerPendingFileRenameOperations

    entsprechende Einträge vorgenommen werden. Auch hierfür sind wieder Administrationsrechte erforderlich.

    Unter Windows 95/98/Me steht die API Funktion MoveFileEx nicht zur Verfügung. Hier werden die zu ersetzenden Dateien in der Datei WININIT.INI eingetragen, die sich in Windows-Verzeichnis befindet bzw. dort angelegt wird.

    Wird das Temp-Verzeichnis allerdings geleert, bevor Windows die entsprechenden Dateien ersetzen konnte, bleiben selbstverständlich die alten Dateien bestehen und das Spielchen mit den veralteten Systemdateien geht von vorne los.

  4. Sind im Setuppaket geschützte Systemdateien enthalten?

    HTML Help

    Sobald man in seinem Projekt eine HTML Hilfe Datei einbindet, packt der Paket- und Weitergabe-Assistent automatisch die Unterstützungsdateien für die HTML Hilfe mit ins Setuppaket. Dafür werden die aktuellen Dateien aus dem System-Verzeichnis verwandt, die zu Problemen führen, wenn das Setup unter einer neueren Windows- Version zusammengestellt wird. Denn seit Windows 2000 stehen die Dateien des HTML Hilfe Systems unter dem Systemdateischutz (SFP). Das Setup wird versuchen die mitgebrachten, neueren Dateien des HTML Hilfe System zu installieren, was der Systemdateischutz unterbindet.

    Abhilfe: Entfernen Sie die Dateien des HTML Hilfe Systems aus Ihrem Setuppaket. Zu diesen Dateien zählen:

    hhctrl.ocx
    itss.dll
    itctl.dll
    itircl.dll
    hh.exe

    Da die HTML Hilfe seit Win98 bzw. Internet Explorer 4.0 by default mitinstalliert wird, besteht keine Notwendigkeit diese Dateien durch sein eigenes Setup-Paket zu installieren. Für den Fall, dass das Projekt auch unter Win95 installiert werden soll, steht ein separates Redist-Paket hhupd.exe für die Dateien der HTML Hilfe zur Verfügung.

    Um zukünftige Installationsprobleme zu vermeiden, können die oben genannten Dateien in der VB6DEP.INI (%VB-DIR%WizardsPDWizard) unter dem Abschnitt "[Do Not Redistribute]" eingetragen werden. Damit werden diese bei neu erstellten Setuppaketen nicht mehr verpackt.

    MSVCRT.DLL

    Die "msvcrt.dll" von Windows XP (Version 7.0.2600.0) ist nicht mehr abwärtskompatibel zu früheren Versionen und sollte nicht weiterverteilt werden. Diese gehört zum Lieferumfang jeder Windows-Version und ist damit im Setuppaket entbehrlich.

    Um zukünftige Installationsprobleme zu vermeiden, kann die "msvcrt.dll" in der VB6DEP.INI ("%VB-DIR%WizardsPDWizard) unter dem Abschnitt "[Do Not Redistribute]" eingetragen werden. Damit werden diese bei neu erstellten Setuppakten nicht mehr verpackt.

    Scripting Runtime - SCRRUN.DLL

    Die Scripting Runtime kann in ihrer aktuellen Version 5.6 nur in Verbindung mit dem Windows Scripting Host (WSH), der als Redistributable erhältlich ist, installiert werden. Die Installation der "scrrun.dll" alleine reicht nicht mehr aus und führt zu einem Abbruch des Setups.

    Wenn Sie nicht den Windows Scripting Host mit Ihrer Anwendung installieren möchten, können Sie auch die ursprüngliche Version der "scrrun.dll" von Ihrer VS/VB Installations-CD hernehmen und mit Ihrer Anwendung ausliefern.

    Damit der Paket- und Weitergabe-Assistent bei neuen Setuppaketen nicht die Version aus dem System-Verzeichnis verpackt, legen Sie die "scrrun.dll" von Ihrer VS/VB Installations-CD in das Verzeichnis "%VB-DIR%WizardsPDWizardRedist".

Fazit

Mit dem VB-Verpackungsassistenten erstellte Setups funktionieren auch unter Windows 2000, Windows Me und Windows XP einwandfrei, sofern auf dem Entwicklungsrechner das aktuelle Servicepack für VB installiert ist, die Installation mit Administrationsrechten ausgeführt wird und sofern nicht irgend ein Programm oder eine Batch-Prozedur nach einem eventuell erforderlichen Neustart sofort das Temp-Verzeichnis des Zielrechners löschen.

Links zum Thema