vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Allgemein   |   VB-Versionen: VB5, VB601.09.02
Anwendung verpacken und weitergeben

Ihre Anwendung soll auf einem Kundenrechner eingesetzt werden, auf dem jedoch kein Visual Basic installiert ist. Was nun? Ein Setup muss her! Aber wie erstellt man ein Setup? Das erfahren Sie in unserem Workshop.

Autor:  Dieter OtterBewertung:  Views:  67.913 

Ihre Anwendung soll auf einem Kundenrechner eingesetzt werden, auf dem jedoch kein Visual Basic installiert ist. Was nun? Ein Setup muss her! Aber wie erstellt man ein Setup? Das erfahren Sie in unserem Workshop.

Warum ein Setup erstellen?

Nachfolgendes Szenario ist sicherlich vielen bereits mehr als bekannt. Nachdem man in wochenlanger Arbeit seine Visual Basic Anwendung programmiert hat, soll diese nun endlich auch ausgeliefert werden bzw. einfach einmal zum Test auf einem "sauberen" System oder Fremdrechner installiert werden. Viele (noch unerfahrene) Entwickler glauben nun, es würde ausreichen, einfach die EXE-Datei der Anwendung auf den neuen Rechner zu kopieren. Doch weit gefehlt! Eine in Visual Basic erstellte Anwendung benötigt zur Ausführung immerdie Laufzeitdateien von VB. Des Weiteren müssen natürlich auch alle zusätzlich benutzten Komponenten (ActiveX-DLLs und OCX-Dateien) auf dem Zielrechner vorhanden und ggf. auch korrekt im System als ActiveX-Komponente registriert sein. Nur wenn alle Dateien korrekt installiert wurden, kann die Anwendung auch ordnungsgemäß ausgeführt werden.

Welche Dateien gehören in ein Setup?

Genau hier fangen die ersten Schwierigkeiten an! "Welche Dateien benötigt meine Anwendung?"

Diese Fragen lässt sich leider nicht pauschal beantworten. In jedem Fall die VB6-Laufzeitdateien - auch bekannt als VB6-Runtimedateien. Auch wenn die VB6-Laufzeitdateien bereits auf vielen System vorhanden sind, sollten Sie - um wirklich sicher zu gehen- diese dennoch immer mit installieren. Hierbei handelt es sich um folgende Dateien:

  • MSVBVM60.DLL
  • OLEAUT32.DLL
  • OLEPRO32.DLL
  • ASYCFILT.DLL
  • STDOLE2.TLB
  • COMCAT.DLL
  • VB6DE.DLL

Unter diesen aufgeführten VB6-Laufzeitdateien befinden sich Standard-DLLs, die nicht extra im System registriert werden müssen, aber auch ActiveX-Komponenten, die im System als solche registriert werden sollten.

Sollten Sie in Ihrer Anwendung weitere Komponenten verwenden, z.B. die Windows-Common-Controls, das RichTextBox-Control o.a., so müssen diese Dateien ebenfalls mit ins Setup gepackt werden. Sie können sich einen kurzen Überblick über die verwendeten Komponenten schaffen, indem Sie Ihr Projekt in der VB-IDE laden und anschließend einen Blick in die Dialoge "Verweise" und "Komponenten" werfen.

Oftmals benötigen externe Komponenten zusätzliche weitere Dateien, wie z.B. die MSVCRT40.DLL. Diese Dateien werden aber nicht separat in den Dialogfenstern "Verweise" und "Komponenten" aufgeführt. Meist finden Sie jedoch einen entsprechenden Hinweis in der Online-Hilfe des Herstellers.

Nachfolgend ein Auszug aus der MSDN (betrifft ImageList-Control):

Hinweis zum Vertrieb

Das Abbildungsliste-Steuerelement (ImageList) ist Bestandteil einer Gruppe von ActiveX-Steuerelementen, die sich in der Datei MSCOMCTL.OCX befinden. Sie können das Abbildungsliste-Steuerelement in Ihrer Anwendung verwenden, indem Sie Ihrem Projekt die Datei MSCOMCTL.OCX hinzufügen. Installieren Sie für einen Vertrieb Ihrer Anwendung die Datei MSCOMCTL.OCX im Microsoft Windows-Verzeichnis \System oder \System32. Weitere Informationen über das Hinzufügen eines ActiveX-Steuerelements zu einem Projekt finden Sie im Programmierhandbuch.

Viele Anbieter von Entwicklerkomponenten erstellen auch eine Abhängigkeitsdatei für die installierten Komponenten. Hierbei handelt es sich um .DEP (Dependency = Abhängigkeit) Dateien, die sich gleichen Verzeichnis befinden, wie die Komponente selbst. In der DEP-Datei sind alle Dateien aufgeführt, die für das Ausführen der Entwicklerkomponente benötigt werden. Typischer Aufbau einer DEP-Datei:

[Version]
Version=1.0.0.13

[sevClb32.ocx <0007>]
Dest=$(WinSysPath)
Date=24.04.02
Time=15:00
Version=1.0.0.13
CABFilename=
CABINFFile=
Uses1=MSVBVM60.DLL
Uses2=OLEAUT32.DLL
Uses3=OLEPRO32.DLL
Uses4=ASYCFILT.DLL
Uses5=STDOLE2.TLB
Uses6=COMCAT.DLL
Uses7=VB6DE.DLL
Uses8=SEVIMCOL.DLL

[SEVIMCOL.DLL <0007>]
Dest=$(WinSysPath)
Date=17.07.00
Time=10:00
Version=1.0.0.2
CABFilename=
CABINFFile=

Um also wirklich sicher zu gehen, dass Sie alle benötigten Dateien mit in das Setup packen, sollten Sie:

a) in der Online-Hilfe des Herstellers nachschauen
b) alle in einer evtl. vorhandenen DEP-Datei aufgeführten Dateien berücksichtigen

Verpackungs- und Weitergabe-Assistent

Der Verpackungs- und Weitergabe-Assistent ist Bestandteil Ihrer Visual Basic Installation (ab Prof. Version). Mit diesem "Werkzeug" lassen sich Installationspakete Ihrer Anwendung erstellen, so dass Ihre Anwendung auf einem Fremdrechner installiert und korrekt ausgeführt werden kann. Der Assistent ermittelt alle von Ihrem Projekt benötigten Dateien (sofern DEP-Dateien vorhanden) und komprimiert diese in eine oder mehrere CAB-Dateien.

Um den Microsoft Verpackungs- und Weitergabe-Assistenten nutzen zu können, sollten Sie Ihr Projekt zunächst kompilieren. Nach dem Start des Assistenten wählen Sie die Projektdatei aus (VBP-Datei). Um ein Setup zu erstellen müssen Sie dann den Befehl Verpacken aufrufen. Der Assistent ermittelt nun alle Dateien, die von Ihrer Anwendung benötigt werden. Hierzu "durchforstet" er die Projektdatei nach Verweisen auf externe Komponenten und listet alle gefundenen Komponenten auf.

Im großen und ganzen findet der Assistent alle benötigten Dateien selbständig. Sollen weitere Dateien mit ins Setup gepackt werden, z.B. Online-Hilfe, Datendateien u. a., müssen diese manuell hinzugefügt werden.

Mit Hilfe des Verpackungs- und Weitergabe-Assistenten ist ein Setup Ihrer Anwendung in relativ kurzer Zeit zusammengestellt. Das Setup selbst besteht aus folgenden Dateien:

  • SETUP.EXE (zum Ausführen des Setups)
  • SETUP.LST (enthält Informationen über Ihre Anwendung, sowie die zu installierenden Dateien)
  • anwendung.CAB (enthält die zu installierenden Dateien in komprimierter Form)

So einfach wie sich mit dem Verpackungs- und Weitergabe-Assistent eigene Setups auch erstellen lassen - es gibt auch gravierende Nachteile:

  1. Das eigentliche Setup selbst ist in reinem VB geschrieben, so dass zum Ausführen des Setups zunächst die VB-Laufzeitdateien installiert werden müssen. Dies übernimmt zwar die Start SETUP.EXE für Sie, doch dauert das Installieren der VB6-Dateien ziemlich lange. Zudem muss nach dem Kopieren der VB6-Laufzeitdateien häufig erst ein Computer-Neustart ausgeführt und die SETUP.EXE dann manuell neu gestartet werden.
     
  2. Auf einigen Systemen ist es schon vorgekommen, dass sich die Anwendung nicht installieren ließ, da die Meldung "Computer muss neu gestartet werden" jedes Mal nach Aufruf der SETUP.EXE erschien. Das eigentliche Installationsprogramm wurde erst gar nicht ausgeführt.
     
  3. Das Setup braucht sehr lange, um die Anwendungsdateien und Komponenten zu installieren.
     
  4. Oftmals treten Konflikte auf, wenn zu installierende Dateien bereits in Verwendung oder auch schreibgeschützt sind.
     
  5. Das Setup lässt sich nur schwer an eigene Bedürfnisse anpassen, wie z.B. "Kopiere Datei xyz nur, falls noch nicht vorhanden"
     

Der Microsoft Verpackungs- und Weitergabe-Assistent eignet sich aber dennoch sehr gut, um zunächst einmal alle benötigten Dateien Ihrer Anwendung zu ermitteln. Diese Dateien werden vom Assistenten im Ordner SUPPORT zwischengespeichert. Gleichzeitig erstellt der Assistent auch eine PDM-Datei mit sämtlichen Informationen über das erstellte Setup. Die PDM-Datei wird hierbei im Projektverzeichnis Ihrer Anwendung abgelegt.

Alternativen zum Weitergabe und Verpackungs-Assistenten

Nachfolgend möchte ich Ihnen zwei Alternativen zum Verpackungs- und Weitergabe-Assistenten vorstellen. Beide Setup-Tools haben Ihre Vor- und Nachteile, doch präsentieren sie sich als echte Alternative zu Microsoft's Setup-Tool, und auch zu anderen, sehr teuren, kommerziellen Setup-Programmen.

Z-Up Maker - der Setup-Maker

Z-Up Maker v4.6
Z-Up Maker wurde ursprünglich von ASCOMP Software entwickelt und war in einer Special-Edition als kostenlose Vollversion auf der vb@rchiv CDROM Vol.1. Mittlerweile wird der Z-Up Maker von Ingo Bordasch (IB-Software) weiterentwickelt und vertrieben und liegt derzeit in Version 4.6 vor. Der Z-Up Maker kostet 29,- EUR und beinhaltet eine deutsche Online-Hilfe. Updates innerhalb der Hauptversionsnummer bekommen registrierte Anwender kostenlos.

Einfach zu bedienen trotz Funktionsvielfalt
Z-Up Maker erstellt individuelle professionelle Setup-Pakete mit zahlreichen Features, wie Bearbeitung der Registry, Änderung von INI-Dateien, Erstellung von Verknüpfungen, Bereitstellung verschiedener Setup-Konfigurationen (Standard, Minimal, Vollständig), Abfrage und Speicherung von Benutzerdaten, Passwort gesicherte Installationen, Multimedia-Unterstützung (Animationen und Sound), zahlreiche Darstellungs-Optionen, benutzerdefinierte Deinstallation und vieles mehr. Zudem verfügt Z-Up Maker derzeit über 7 verschiedene Output-Sprachen: Deutsch, Englisch, Französisch, Italienisch, Spanisch, Portugiesisch, Niederländisch.

Import-Funktion
Der Z-Up Maker verfügt über eine Import-Funktion für Visual-Basic 5/6- und Delphi-Projekte - und sollten Sie bereits ein Setup mit dem Visual Basic Weitergabeassistent erstellt haben, lässt sich sogar die vom Weitergabeassistent erzeugte PDM-Datei einlesen. Die Import-Funktion durchsucht Ihre Visual Basic Projektdatei nach verwendeten Komponenten und Verweisen und nimmt diese dann automatisch in die "zu installierenden Dateien" - Liste auf. Ein bisschen Handarbeit ist dennoch angesagt, da evtl. vorhandene Abhängigkeits-Dateien (.DEP-Dateien) nicht berücksichtigt werden. Hier könnte die Import-Funktion noch ein wenig verbessert werden.

Zusammenstellen und Ausführen des erstellten Setups
Das Zusammenstellen der Setup-Dateien erledigt Z-Up Maker wesentlich fixer als der Microsoft Verpackungs- und Weitergabe-Assistent. Die Kompressionsrate der Dateien ist in etwa gleich. Beim Ausführen des Setups auf dem Zielrechner arbeitet Z-Up Maker jedoch um ein Vielfaches schneller. Auch kopiert Z-Up Maker die VB6-Laufzeitdateien auf das System, ohne danach erst einen Neustart durchführen zu müssen.

Weitere Infos, sowie Download-Möglichkeit der neuesten Version von Z-Up Maker:  www.zupmaker.de

Freeware: Inno Setup v2.0.19

Inno Setup ist ein Freeware-Installationstool, mit dem sich ebenso professionelle und ansprechende Anwendungs-Setup-Programme erstellen lassen, wie das mit Z-Up Maker möglich ist:

  • Unterstützung aller 32-Bit Windows Plattformen (Win9x, WinNT, WinME, Win2k, WinXP)
  • alle Dateien können für die Weitergabe in eine einzige EXE-Datei gepackt werden
  • unterstützt das moderne Look & Feel von Win2k/XP
  • Bereitstellung verschiedener Setup-Konfigurationen (Standard, Minimal, Vollständig)
  • Ersetzt auch Dateien, die gerade in Benutzung sind
  • Unterstützt SHARED-Files (gemeinsame Dateien), indem es den internen Zähler hochzählt
  • Erstellen von beliebigen Verknüpfungen (auch auf dem Desktop)
  • Erstellen von Verknüpfungen in der Schnellstart-Leiste von Windows
  • Anzeige von ReadMe-Dateien vor und nach der Installation
  • Anzeige von Lizenzhinweis-Texten, die bestätigt werden müssen, um die Installation fortzusetzen
  • Erstellen und Bearbeiten von Registry-Einträgen und INI-Dateien
  • optional: Silent-Mode (Installation und Deinstallation)

Inno Setup ist völlig frei von Lizenzgebühren, egal ob Sie eine private, Freeware oder kommerzielle Anwendung damit verpacken und vertreiben!

Download und Installation von Inno Setup

Bevor Sie ein Setup mit Inno Setup erstellen können, brauchen Sie natürlich die Benutzeroberfläche von Inno Setup. Hierzu sollten Sie jetzt zunächst Inno Setup downloaden und installieren. Die neueste Version finden Sie im Downloadbereich der  Inno Setup Homepage.

Download:  Inno Setup v2.0.19

Für unseren Workshop haben wir die derzeit aktuelle Version 2.0.19 herangezogen.

Download der deutschen Sprachdatei
Inno Setup erstellt standardmäßig Installationspakete in englischer Sprache. Unter nachfolgendem Link ist jedoch eine Sprachdatei für Deutsch bereitgestellt, die Sie in das Installationsverzeichnis von Inno Setup kopieren sollten.

Download:  German-2-2.0.18.isl
(Rechtsklick und "Speichern unter..." wählen)

Weitere Sprachdateien können direkt von der Inno Setup Homepage geladen werden:
 Translations

Informationen über das Entwickler-Team von Inno Setup
Copyright © 1997-2002 Jordan Russell
jrsoftware.org // Jordan Russels's Software

 http://www.jrsoftware.org/

Erstellen eines eigenen Setups mit Inno Setup

Nachfolgend möchte ich Ihnen Schritt für Schritt zeigen, wie sich mit Inno Setup ein Setup-Programm für die eigene Anwendung erstellen lässt.

Inno Setup: Setup-Skript Wizard
Der Assistent...

Inno Setup verfügt neben einer sehr umfangreichen Setup-Skript-Sprache auch über einen dialoggesteuerten Assistenten, mit dessen Hilfe sich bereits die meisten Einstellungen für das eigene Anwendungs-Setup festlegen lassen. Aus den vorgenommenen Angaben erzeugt Inno Setup dann automatisch ein Setup-Skript, das von Ihnen letztendlich noch an die individuellen Vorstellungen angepasst werden kann.

Basisinformationen über Ihre Anwendung
Auf der ersten Seite des Assistenten tragen Sie die Informationen Ihrer Anwendung ein:

  • Application name: Der Name Ihrer Anwendung, z.B. WinChat
  • Application name including version: WinChat 1.02
  • Application publisher: Ihr Name bzw. Firmenbezeichnung
  • Application website: Ihre Homepageadresse

Nach dem Klicken auf "Weiter" können Sie festlegen, in welches Verzeichnis Ihre Anwendung auf dem Zielsystem installiert werden soll. Standardmäßig wird "Program Files Directory" vorgegeben, d.h. \Programme. Innerhalb dieses Ordners wird dann der Ordner für Ihre Anwendung erstellt, den Sie im nachfolgenden Eingabefeld "Application Directory Name" festlegen können. Ferner können Sie bestimmen, ob der Anwender diese Verzeichnisvorgabe ändern darf oder nicht. Falls nicht, deaktivieren Sie die Einstellung "Allow user to change the application directory".

Zu installierende Dateien auswählen
Im nächsten Schritt werden die zu installierenden Dateien ausgewählt. Da Inno Setup keine Import-Möglichkeit von VB5/6-Projekten vorsieht, sollten Sie (wenigstens das erste Mal) doch zunächst den Microsoft Verpackungs- und Weitergabe-Assistenten starten und hiermit ein Setup erstellen. Warum? Wie bereits eingangs des Workshops erwähnt, speichert der Microsoft Verpackungs-Assistent alle benötigten Dateien in den Ordner SUPPORT. Diese Dateien brauchen Sie jetzt nur noch der Dateiliste im Inno Setup Assistenten hinzufügen. Klicken Sie hierzu auf die Schaltfläche Add file(s), wechseln in das Verzeichnis Support und markieren alle Dateien, um diese in die Dateiliste zu übernehmen.

alle Dateien aus dem Support-Ordner auswählen und übernehmen

Der nächste Schritt besteht darin, unnötige Dateien wieder aus der Dateiliste zu löschen. Suchen Sie also nach folgenden Dateien und entfernen diese aus der Liste:

  1. EXE-Datei Ihrer Anwendung
  2. SETUP.EXE
  3. SETUP.LST
  4. SETUP1.EXE
  5. ST6UNST.EXE
  6. VB6STKIT.DLL
  7. *.BAT und *.DDF Datei

Die Liste sollte jetzt nur noch die tatsächlich benötigten Dateien enthalten. Haben Sie eine Datei vergessen (z.B. die Online-Hilfe oder zusätzliche Datendateien) fügen Sie diese über die Schaltfläche "Add file(s)" jetzt noch hinzu.

Verknüpfungen festlegen
Anwendungs-Icons und Verknüpfungen
Klicken Sie auf Next und legen Sie anschließend die gewünschten Verknüpfungen fest:

  • Application Start Menu group name: Geben Sie hier den Namen der zu erstellenden Programmgruppe ein, z.B. WinChat
  • Allow user to change the Start Menu group name: Deaktivieren Sie diese Einstellung, wenn der Anwender die Programmgruppe nicht verändern darf
  • Allow user to disable Start Menu group creation: Aktivieren Sie diese Einstellung, wenn Sie dem Anwender erlauben wollen, keine Programmgruppe zu erstellen
  • Create an Internet shortcut in the Start Menu group: Aktivieren Sie diese Einstellung, wenn Inno Setup in der Programmgruppe autom. einen Link zu Ihrer Homepage eintragen soll.
  • Always create an Uninstal icon in the Start Menu group: Aktivieren Sie diese Einstellung, wenn Inno Setup in der Programmgruppe ein Symbol für das Deinstallieren Ihrer Anwendung hinzufügen soll.
  • Allow user to create a desktop icon: Aktivieren Sie diese Einstellung, wenn der Anwender die Möglichkeit haben soll, eine Verknüpfung direkt auf dem Desktop zu erstellen.
  • Allow user to create a Quick launch icon: Aktivieren Sie diese Einstellung, wenn der Anwender die Möglichkeit haben soll, eine Verknüpfung in der Schnellstart-Leiste der Taskbar zu erstellen.

Lizenzhinweise und ReadMe-Dateien
Im nächsten Schritt können Sie noch eine Datei mit Lizenzbestimmungen zuordnen, sowie ReadMe-Dateien, die vor- und/oder nach der Installation aufgerufen werden sollen.

Hiermit hätte der Inno Setup Skript-Wizard seine Arbeit erledigt. Klicken Sie auf Finish, so erstellt Inno Setup aus den im Assistenten festgelegten Angaben ein Setup-Skript und wechselt autom. in den Skript-Editor.

Inno Setup Skript bearbeiten

Unsere Anwendung, die wir mit dem Inno Setup verpacken möchten, verwendet folgende zusätzliche Komponenten:

  • Microsoft Windows Common Controls
  • Microsoft Winsock-Control
  • Microsoft RichTextBox-Control

Das Setup Skript, das uns der Inno Setup Assistent erstellt hat, sieht zunächst so aus:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
AppName=WinChat
AppVerName=WinChat 1.02
AppPublisher=Dieter Otter
AppPublisherURL=http://www.tools4vb.de
AppSupportURL=http://www.tools4vb.de
AppUpdatesURL=http://www.tools4vb.de
DefaultDirName={pf}\WinChat
DefaultGroupName=WinChat
AlwaysCreateUninstallIcon=yes
; uncomment the following line if you want your installation to run on NT 3.51 too.
; MinVersion=4,3.51

[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; 
  GroupDescription: "Additional icons:"; MinVersion: 4,4
Name: "quicklaunchicon"; Description: "Create a &Quick Launch icon"; 
  GroupDescription: "Additional icons:"; MinVersion: 4,4; Flags: unchecked

[Files]
Source: "WinChat.exe"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "WINSKDE.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "COMCAT.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "MSCMCDE.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "MSCOMCTL.OCX"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "MSVBVM60.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "MSWINSCK.OCX"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "OLEAUT32.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "OLEPRO32.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "RCHTXDE.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "RICHED32.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "RICHTX32.OCX"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "STDOLE2.TLB"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "VB6DE.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite
Source: "ASYCFILT.DLL"; DestDir: "{app}"; CopyMode: alwaysoverwrite

[INI]
Filename: "{app}\WinChat.url"; Section: "InternetShortcut"; 
  Key: "URL"; String: "http://www.tools4vb.de"

[Icons]
Name: "{group}\WinChat"; Filename: "{app}\WinChat.exe"
Name: "{group}\WinChat on the Web"; Filename: "{app}\WinChat.url"
Name: "{userdesktop}\WinChat"; Filename: "{app}\WinChat.exe"; 
  MinVersion: 4,4; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\WinChat"; 
  Filename: "{app}\WinChat.exe"; MinVersion: 4,4; Tasks: quicklaunchicon

[Run]
Filename: "{app}\WinChat.exe"; Description: "Launch WinChat"; 
  Flags: nowait postinstall skipifsilent

[UninstallDelete]
Type: files; Name: "{app}\WinChat.url"

Das ganze ist jetzt noch ziemlich "unsortiert", was aber nicht weiter tragisch ist. Wichtiger ist, dass man CopyMode entsprechend ändert: und zwar von alwaysoverwrite auf alwaysskipifsameorolder. Dies bewirkt, dass eine Datei nur dann kopiert wird, wenn eine evtl. bereits vorhandene Datei älter ist, als die zu kopierende Datei. Außerdem sollen Systemdateien bekanntlich in das Systemverzeichnis installiert werden - und nicht in das Anwendungsverzeichnis. Ändern wir demnach DestDir von {app} auf {sys} - aber nur bei den Systemdateien.

Der nächste Schritt besteht daraus, festzulegen, welche Dateien explizit im System registriert werden sollen. Hierbei handelt es sich in unserem Beispiel um folgende Dateien:

  • COMCAT.DLL
  • OLEPRO32.DLL
  • OLEAUT32.DLL
  • MSVBVM60.DLL
  • RICHTX32.OCX
  • MSCOMCTL.OCX
  • MSWINSCK.OCX

Bei all diesen Einträgen fügen wir demnach noch die Flags-Eigenschaft hinzu:

Source: "COMCAT.DLL"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; 
  Flags: regserver noregerror

Zwei Sonderfälle:
Der STDOLE2.TLB Eintrag sollte wie folgt geändert werden:

Source: "STDOLE2.TLB"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; 
  Flags: regtypelib noregerror

Die VB-Laufzeitdateien sind häufig bereits in Benutzung, während ein Setup ausgeführt wird und können (falls in einer neueren Version vorliegend) nicht sofort ersetzt werden. Inno Setup kann solche Dateien jedoch "kennzeichnen" und sie nach einem System-Neustart ersetzen. Hierzu ist es allerdings erforderlich, dass Sie die Einträge im Skript entsprechend um einen weiteren Parameter ergänzen:

Source: "OLEAUT32.DLL"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; 
  Flags: restartreplace regserver noregerror

Nun gibt es auch noch eine ganze Reihe von Dateien, die als gemeinsame Dateien im System gekennzeichnet werden sollen. Man spricht hier auch von SHARED-Files. Bei diesen Dateien handelt es sich um Dateien, die von unterschiedlichen Anwendungen benötigt werden, aber nur ein einziges Mal auf dem System vorhanden sind. Werden Dateien bei der Installation eines Programms als "SHARED" gekennzeichnet, so wird in der Registry der entsprechende Dateizähler um den Wert 1 erhöht. Bei der Deinstallation einer Anwendung wird der interne Dateizähler dann entsprechend um den Wert 1 verringert. Ergibt sich daraus ein Wert von kleiner 1, kann die Datei gelöscht werden, andernfalls bleibt sie weiterhin auf dem System vorhanden.

Um bei unserem obigen Beispiel zu bleiben, kennzeichnen wir also noch alle gemeinsame Dateien durch den Eintrag sharedfile (im Flags-Abschnitt):

Source: "MSVBVM60.DLL"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; 
  Flags: sharedfile regserver noregerror

Jetzt fragen Sie sich sicher, wie man feststellt, welche Dateien registriert werden müssen, in welches Verzeichnis die Dateien zu installieren sind und welche Dateien als "gemeinsame Dateien" (SHARED-Files) zu kennzeichnen sind.

Das ist eine berechtigte Frage! Schauen Sie sich deshalb einmal den Inhalt der SETUP.LST an, die der Microsoft Verpackungs- und Weitergabeassistent erstellt:

File1=@VB6STKIT.DLL,$(WinSysPathSysFile),,, ...
File2=@COMCAT.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),, ...
File3=@VB6DE.DLL,$(WinSysPath),,$(Shared), ...
File4=@STDOLE2.TLB,$(WinSysPathSysFile),$(TLBRegister),, ...
File5=@ASYCFILT.DLL,$(WinSysPathSysFile),,, ...
File6=@OLEPRO32.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),, ...
File7=@OLEAUT32.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),, ...
File8=@msvbvm60.dll,$(WinSysPathSysFile),$(DLLSelfRegister),, ...

...

Kurze Erläuterung:

  • (WinSysPathSysFile) bedeutet, dass die Datei ins Systemverzeichnis zu installieren ist. Inno Setup verwendet hierfür DestDir: {sys}
  • $(DLLSelfRegister) entspricht dem Inno Setup Flag: regserver
  • $(Shared) entspricht Flag: sharedfile
  • $(TLBRegister) entspricht Flag: regtypelib

Fazit:
Auch wenn man den Microsoft Verpackungs- und Weitergabe-Assistent eigentlich nicht verwenden möchte, lohnt es sich zunächst einmal ein Setup damit zu erstellen

Ein kleines Hilfsprogramm

Wenn man sich die vom Microsoft Verpackungs- und Weitergabe-Assistenten erstellte SETUP.LST so anschaut, sollte man meinen, dass es nicht allzu schwer sein dürfte, die beiden relevanten Abschnitte [Bootstrap Files] und [Setup1 Files] auszulesen und entsprechend in die für Inno Setup korrekte und verständliche Syntax umzuwandeln.

Und da wir ja schließlich Programmierer sind, machen wir das jetzt auch. Wir erstellen uns ein kleines Progrämmchen, dass die SETUP.LST analysiert und den [files]-Abschnitt für das Inno Setup Skript vollautomatisch zusammenstellt.

Starten Sie Microsoft Visual Basic und erstellen ein neues Projekt. Platzieren Sie aufder Form folgende Steuerelemente:

  • TextBox: txtSetupFile (Locked = True)
  • Schaltfläche: cmdOpen
  • Schaltfläche: cmdCreate (Enabled = False)
  • TextBox: txtFiles (MultiLine = True, ScrollBars = 2 - Both)
  • CommonDialog: CommonDialog1

Anordnung der Steuerelemente

Aufbau der SETUP.LST
Die vom Microsoft Verpackungs- und Weitergabe-Assistenten erstellte SETUP.LST ist wie eine normale INI-Datei aufgebaut. Aus diesem Grund verwenden wir zum Auslesen die API-Funktion GetPrivateProfileString, welche im Allgemein-Teil der Form zu deklarieren ist:

Option Explicit
 
' Benötigte API
Private Declare Function GetPrivateProfileString _
  Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long

Der Aufruf erfolgt dann später im Programm über die benutzerdefinierte Funktion GetIniString, die Sie jetzt ebenfalls in den Codeteil der Form einfügen.

Public Function GetIniString(ByVal sSection As String, _
  ByVal sKey As String, _
  ByVal sDefault As String, _
  ByVal sINIFile As String) As String
 
  ' String aus INI-Datei auslesen
  Dim lResult As Integer
  Dim sText As String
 
  sText = Space$(256)
  lResult = GetPrivateProfileString(sSection, _
    sKey, sDefault, sText, Len(sText), sINIFile)
 
  GetIniString = Left$(sText, lResult)
End Function

Auswahl der SETUP.LST
Die vom Microsoft Verpackungs- und Weitergabe-Assistenten erstellte SETUP.LST wird über diekleine grafische Schaltfläche rechts neben dem Eingabefeld ausgewählt:

Private Sub cmdOpen_Click()
  ' Datei auswählen
  On Local Error Resume Next
  With CommonDialog1
    .CancelError = True
    .Filter = "Setup.lst (setup.lst)|setup.lst"
    .FileName = txtSetupFile.Text
    .ShowOpen
    If Err = 0 Then
      txtSetupFile.Text = .FileName
    End If
  End With
  On Local Error GoTo 0
End Sub

Sobald eine Datei ausgewählt wurde, aktivieren wir die Schaltfläche cmdCreate:

Private Sub txtSetupFile_Change()
  ' Prüfen
  cmdCreate.Enabled = (txtSetupFile.Text <> "")
End Sub

Erstellen eines Files-Eintrags für Inno Setup
"Basteln" wir uns nun eine Funktion, die einen "File"-Eintrag der SETUP.LST in die korrekte und für Inno Setup verständliche Syntax umwandelt:

Private Function CreateInnoSetupLine(ByVal sLine As String, _
  sInstallPath As String, _
  Optional ByVal bRuntime As Boolean = False) As String
 
  Dim sFile As String
  Dim sPath As String
  Dim sRegister As String
  Dim sShared As String
  Dim sFlags As String
  Dim AZ As String
 
  ' Anführungszeichen
  AZ = Chr$(34)
 
  ' Infos ermitteln
  Dim sInfo() As String
 
  sInfo = Split(sLine, ",")
 
  ' Dateiname
  sFile = Mid$(sInfo(0), 2)
 
  ' Pfad-Konstanten umwandeln
  sPath = sInfo(1)
  sPath = Replace(LCase$(sPath), "$(winpath)", "{win}")
  sPath = Replace(LCase$(sPath), "$(winsyspath)", "{sys}")
  sPath = Replace(LCase$(sPath), "$(winsyspathsysfile)", "{sys}")
  sPath = Replace(LCase$(sPath), "$(msdaopath)", "{dao}")
  sPath = Replace(LCase$(sPath), "$(commonfiles)", "{cf}")
  sPath = Replace(LCase$(sPath), "$(apppath)", "{app}")
 
  ' Register?
  sRegister = ""
  If LCase$(sInfo(2)) = "$(dllselfregister)" Then
    sRegister = "regserver noregerror"
  ElseIf LCase$(sInfo(2)) = "$(tlbregister)" Then
    sRegister = "regtypelib noregerror"
  End If
 
  ' Shared?
  sShared = ""
  If LCase$(sInfo(3)) = "$(shared)" Or bRuntime Then
    sShared = "sharedfile"
  End If
 
  ' Inno Setup Flags zusammenstellen
  sFlags = Trim$(sRegister & " " & sShared)
  If bRuntime Then
    sFlags = Trim$("restartreplace uninsneveruninstall " & sFlags)
  ElseIf LCase$(Right$(sFile, 4)) = ".ocx" Then
    sFlags = Trim$("regstartreplace " & sFlags)
  End If
  If sFlags <> "" Then sFlags = "; Flags: " & sFlags
 
  ' Inno Setup File-Eintrag zusammenstellen    
  sLine = "Source: " & AZ & sInstallPath & sFile & AZ & "; " & _
    "DestDir: " & AZ & sPath & AZ & "; " & _
    "CopyMode: alwaysskipifsameorolder" & sFlags
 
  CreateInnoSetupLine = sLine
End Function

Auslesen der SETUP.LST
Fehlt uns jetzt nur noch das Auslesen der SETUP.LST:

Private Sub cmdCreate_Click()
  ' Setup.lst auslesen
  Dim sLine As String
  Dim sInstallPath As String
  Dim nCount As Long
  Dim sINIFile As String
  Dim sInfo() As String
 
  ' Pfad zur SETUP.LST und den Installationsdateien
  sINIFile = txtSetupFile.Text
  sInstallPath = Left$(sINIFile, InStrRev(sINIFile, "\")) & "support\"
 
  txtFiles.Text = "[Files]" & vbCrLf
 
  ' Abschnitt [Bootstrap Files] aulesen
  nCount = 0
  Do
    nCount = nCount + 1
    sLine = GetIniString("Bootstrap Files", _
      "File" & CStr(nCount), "", sINIFile)
 
    ' kein weiterer Eintrag...
    If sLine = "" Then Exit Do
 
    ' Datei-Infos ermitteln und in die korrekte Syntax
    ' von Inno Setup umwandeln
    sLine = CreateInnoSetupLine(sLine, sInstallPath, True)
    txtFiles.Text = txtFiles.Text & sLine & vbCrLf
  Loop
 
  ' Abschnitt [Setup1 Files] auslesen
  nCount = 0
  Do
    nCount = nCount + 1
    sLine = GetIniString("Setup1 Files", _
      "File" & CStr(nCount), "", sINIFile)
 
    ' kein weiterer Eintrag...
    If sLine = "" Then Exit Do
 
 
    ' Datei-Infos ermitteln und in die korrekte Syntax
    ' von Inno Setup umwandeln
    sLine = CreateInnoSetupLine(sLine, sInstallPath)
    txtFiles.Text = txtFiles.Text & sLine & vbCrLf
  Loop
End Sub

Das war's. Unser kleines Hilfsprogramm ist fertig. Speichern Sie das Projekt nun und starten es anschließend. Wählen Sie dann eine vom Microsoft Verpackungs- und Weitergabe-Assistenten erstellte SETUP1.LST und klicken auf die Schaltfläche Abschnitt [Files] erzeugen.

autom. erzeugter [files]-Abschnitt

Jetzt kopieren Sie den gesamten Inhalt der TextBox in die Zwischenablage und fügen den Abschnitt dann in das Setup-Skript von Inno-Setup ein.

Kompilieren und Erstellen des Setupprogramms

Bevor Sie das Inno Setup Skript kompilieren, sollten Sie noch folgende Einträge im Abschnitt [Setup] hinzufügen:

[Setup]
MessagesFile=compiler:German-2-2.0.18.ISL
DisableStartupPrompt=yes

  • MessageFile: Hier wird der Compiler angewiesen anstelle der englischen Sprachdatei die deutsche Sprachdatei zu verwenden
     
  • DisableStartupPrompt: Durch diese Anweisung verschwindet die "lästige" Meldung "xyz wird jetzt installiert. Wollen Sie fortfahren?"
     

Die englischen Texte im Abschnitt [Tasks] sollten Sie ebenfalls ändern:

[Tasks]
Name: "desktopicon"; Description: "Icon auf dem Desktop erstellen"; 
  GroupDescription: "Zusätzliche Icons:"; MinVersion: 4,4
Name: "quicklaunchicon"; Description: "Icon 'Schnellstartbereich' der Taskleiste erstellen"; 
  GroupDescription: "Zusätzliche Icons:"; MinVersion: 4,4; Flags: unchecked

WICHTIG!
Das Ersetzen von in Verwendung befindlichen Dateien durch einen Neustart (Flag "restartreplace") erfordert administrative Rechte!

Aus diesem Grund sollte das Setupprogramm vor dem Ausführen der Installation prüfen, ob der Anwender als Administrator angemeldet ist. Dies erreichen Sie durch folgenden Eintrag im Abschnitt [Setup]:

[Setup]
...
AdminPrivilegesRequired=yes
...

Ist diese Einstellung nicht gesetzt und der Anwender hat keine administrativen Rechte, erscheint beim Versuch Dateien zu ersetzen eine Zugriffsverletzung.

Kompilieren des Skripts
Nun ist es an der Zeit das Setup-Skript zu kompilieren, so dass Inno Setup eine ausführbare SETUP.EXE daraus erstellt. Dies erfolgt über das Menü FILE - Compile bzw. F9. Das Zusammenstellen der SETUP.EXE erfolgt sehr schnell - die Kompressionsrate ist ebenfalls sehr gut. Nach dem Kompilieren werden Sie gefragt, ob Sie das Setup nun testen wollen.

Der Begrüssungsbildschirm Ihres Setup-Programms

Weitere Features von Inno Setup

Bei den bisher beschriebenen Features handelt es sich bei weitem noch nicht um alle Möglichkeiten, die Ihnen Inno Setup bietet. Es würde auch den Rahmen dieses Workshops sprengen, wenn ich alle Features hier beschreiben würde.

Weitere Features von Inno Setup sind z.B.:

  • Zuordnen individueller Wizard-Bilder
  • Bereitstellung verschiedener Setup-Konfigurationen (Standard, Minimal, Vollständig)
  • Erstellen und Bearbeiten von Registry-Einträgen und INI-Dateien
  • Ausführen von Setups im Silent-Mode
  • u.v.m.

All diese Möglichkeiten finden Sie ausführlich in der Inno Setup Online-Hilfe beschrieben.

Unterstützung bei Fragen zu Inno Setup
Auf der  Inno Setup Homepage finden Sie eine FAQ-Liste mit Antworten zu den häufigsten Fragen. Außerdem gibt es dort noch weitere Tools zum downloaden, z.B. ISTool, welches eine visuelle Bearbeitung der Inno Setup Skripts erlaubt.

Ich hoffe, ich konnte Ihnen mit diesem Workshop den Ein- oder auch Umstieg in das sehr leistungsfähige Inno Setup erleichtern und wünsche Ihnen nun viel Spaß beim Erstellen Ihrer individuellen Installationsprogramme.



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.