Hilfsmittel zum Programmieren

Delphi-Interface zum Windows-API für:
Mehrsprachige Delphi-Programme Software-Verteilung
Erstellen von Installationsarchiven Überprüfen von Installationsarchiven
Starthilfe für Delphi (ab XE) Unit-Analysator für Delphi-Projekte
Versionsinformationen für Delphi Mikrocontroller

Delphi-Interface zur Windows-Aufgabenplanung 2.0

Seit Windows Vista gibt es eine neue Version 2.0 der Aufgabenplanung. Diese umfasst neben den Funktionen der Vorversion auch einige neue Optionen, z.B. das Nachholen einer Aufgabe oder das Verwenden eines Benutzerkontos ohne Kennwort. Das Windows-API stellt dazu eine Reihe von neuen Interface-Funktionen bereit, mit der man die Aufgabenplanung in eigene Programme einbinden kann.
Um dem Delphi-Entwickler dies zu erleichtern, habe ich ein Unit-Paket erstellt, in dem die Funktionen des Windows Task Scheduler 2.0 in Delphi-Objekte gekapselt werden. Dadurch können sie sehr einfach in eigene Programme integriert werden. Die Verwendung wird durch ein Beispielprogramm (neu im August 2020) erklärt.

Hinweis: Die Implementierung ist noch nicht ganz vollständig. Es werden aber alle wichtigen Funktionen unterstützt, um Zeitpläne für eigene Anwendungen einzutragen und zu bearbeiten.

Download:

Version 2.0.1 v. 06.03.2023


Delphi-Interface zum Windows Volume Shadow Copy Service (VSS)

Dieser Dienst wurde erstmals mit dem Microsoft-Betriebssystemen Windows XP eingeführt und in den nachfolgenden Betriebssystemen (Windows 7,8 und 10, sowie Windows Server 2008 und 2012) um diverse Funktionen erweitert. Er basiert auf der Möglichkeit, mit NTFS-Dateisystemen Schnappschüsse zu erzeugen. Damit wird es möglich, auch Dateien zu kopieren, die gerade durch laufende Anwendungen blockiert sind. Ist der Dienst aktiv, bleibt von den Dateien, die verändert werden, die beim Anfertigen des Schnappschusses vorhandene Version erhalten. Die neuen Daten werden zunächst an einer anderen Stelle im Dateisystem abgelegt. So bleibt der Zustand des Datenträgers für die Lebensdauer des Schnappschusses erhalten und kann während dieser Zeit problemlos gesichert werden.

Die Benutzung des VSS ist im Microsoft Software Development Kit für Windows 7 genau beschrieben. Dort findet man auch ein Beispielprogramm mit Quelltexten (VSHADOW.EXE). Diese sind allerdings, ebenso wie die Interfaces (Header-Dateien) zu den Windows-Bibliotheken in C++ geschrieben. Um VSS auch unter Delphi nutzen zu können, ist es als erstes erforderlich, die Header-Dateien in eine Delphi-Unit (Unit VssApi.pas im Programmpaket) umzusetzen. Eine weitere Unit (VssUtils.pas) enthält die nach Delphi konvertierten Routinen aus dem o.g. Beispielprogramm von Microsoft. Zur einfachen Verwendung in eigenen Programmen werden alle Funktionen in Form einer Klasse TVolumeShadowCopy bereitgestellt. Zur Ausführung in einem eigenen Thread steht außerdem die Klasse TVssThread zur Verfügung. Ein Beispiel für die Verwendung in eigenen Programmen findet man in der dem Quelltext-Paket beiliegenden readme.txt-Datei.
Das Programmpaket enthält schließlich auch noch eine konvertierte Version des Hauptteils des Beispiel-Programms als Konsolenanwendung (VsToolkit). Dabei wurde als Grundlage nicht das originale Beispiel von Microsoft verwendet, sondern die modifizierte Version Volume Shadow Copy Simple Client (VSCSC). Alle Programme und Routinen können sowohl für 32- als auch für 64-Bit-Systeme kompiliert werden (für letzteres ist mindestens Delphi-XE2 erforderlich).

Hinweise: Mit den bereit gestellten Routinen können die meisten für ein Backup notwendigen Funktionen ausgeführt werden. Ein Restore wird noch nicht unterstützt.
Das Ausführen des Programms erfordert Administratorrechte.

Downloads:

Version 2.3.3 v. 14.3.2022


Delphi-Interface zu Windows Portable Devices (WPD)

Wenn man ein Smartphone an einen Windows-Computer anschließt, wird der Inhalt nicht, wie z.B. bei USB-Speichergeräten, in dessen Dateisystem eingebunden. Der Grund dafür ist, dass derartige Geräte über das Media Transport Protocol (MTP) angebunden werden. Um auf die Inhalte zuzugreifen, benötigt man die Funktionen des Windows-Portable-Devices-Interfaces (WPD).

Die Units, die erforderlich sind, um die WPD-Funktionen in eigene Delphi-Programme einbinden zu können, sind bislang nicht Bestandteil der System-Bibliotheken. Ich habe daher die folgenden Units erstellt, um einen Zugriff auf die Dateien eines über MTP angeschlossenen Geräts in eigenen Delphi-Programmen zu ermöglichen:

Downloads:

Version 1.1 v. 4.11.2023


Mehrsprachige Delphi-Anwendungen mit GNU Gettext

Es gibt verschiedene Möglichkeiten, eine Delphi-Anwendung mit einer mehrsprachigen Oberfläche zu versehen. Auch die Original-Entwicklungsumgebung bringt hierfür Werkzeuge mit. Bei der Benutzung zeigen sich diese aber etwas schwerfällig in der Anwendung.
Ich habe daher alle meine mehrsprachigen Programme auf das als OpenSource bereitgestellte System GNU Gettext for Delphi von Lars B. Dybdahl umgestellt. Es funktioniert mit allen aktuellen Delphi-Versionen. Ich verwende es z.Zt. mit Delphi 10 Seattle (auch mit dem 64-bit-Compiler). Nach kurzer Eingewöhnung kann man damit sehr effizient arbeiten. Außerdem bietet es den großen Vorteil, dass für die Erstellung einer Übersetzung keine Delphi-Entwicklungsumgebung bereitstehen muss, so dass jeder Anwender die Möglichkeit hat, eine Übersetzung in seine Sprache vorzunehmen. Es genügt ein einfacher Texteditor oder besser das folgende speziell dafür entwickelte Editor-Programme:

Basis für alle Übersetzungen ist immer eine vorzugsweise in Englisch geschriebene Delphi-Anwendung. Weitere Informationen findet man unter Personal Backup - Übersetzungen.
Hinweis: Die nachfolgend beschriebenen Programme können auch für Embarcadero C++ Builder verwendet werden.

Die Übersetzungen werden in zwei Schritten erstellt:

  1. Erstellung einer Text-Datei (po-Datei) mit den englischen Redewendungen als Schablone für die Übersetzungen.
  2. Zusammenführen einer vorhandenen Übersetzung in einen andere Sprache mit der aktualisierten Schablone.

Bereits übersetzte Teile werden dadurch bei Programmaktualisierungen immer automatisch übernommen, so dass der Aufwand für die Aktualisierung der Übersetzung klein bleibt.
Die beiden erforderlichen Programme werden im Windows-Explorer über das Kontext-Menü aufgerufen:

1. Rechtsklick auf ein Verzeichnis   2. Rechtsklick auf eine po-Datei
erzeugt die Schablone (po-Datei).   führt Schablone und Übersetzung zusammen und startet PoEdit für die Nachbearbeitung.

Das Programm für die Schablonenerstellung (ggdxgettext.exe) habe ich etwas erweitert:

Auch die anderen Programme aus dem Originalpaket habe ich überarbeitet:

Wichtiger Hinweis: Wenn eine Übersetzung mit ggassemble.exe in eine mit Delphi erstellte exe-Datei eingebettet werden soll, ist es wichtig, dass in den Delphi-Quelltexten des Projekts die dazu passende Unit GnuGetText.pas aus dem hier angebotenen Download verwendet wird.

Neue Bedieneroberfläche GgtTranslate

Zum sporadischen Bearbeiten einzelner Übersetzungen ist die Integration in Form der Kontext-Menüs sicher ganz praktisch. Beim Erstellen eines mehrsprachigen Programms (z.B. in Englisch, Deutsch und weiteren Sprachen), wird die Bedienung auf diese Weise allerdings doch etwas mühsam, insbesondere wenn die Texte noch laufend angepasst werden müssen. Man muss ständig die Verzeichnisse wechseln und erreicht sein Ziel erst nach diversen Mausklicks.
Abhilfe schafft hier mein Programm GgtTranslate, das für jedes Projekt alle Schritte, auch für mehrere Sprachen, unter einer Bedieneroberfläche zusammenfasst. Es benutzt dabei die gleichen Einstellungen (dxgettext.ini) wie die Originalprogramme, erlaubt es aber, alle Schritte unmittelbar nacheinander auszuführen:

  1. Extrahieren der Strings in der Originalsprache (i.d.R. englisch) aus den Quelltexten (pas- und dfm-Dateien) und Erstellen einer Übersetzungsschablone.
  2. Zusammenführen dieser Schablone mit den ausgewählten Übersetzungen
  3. Bearbeiten von ignore.po mit einem Texteditor
  4. Bearbeiten der Übersetzungen und Erzeugen der mo-Dateien, z.B. mit PoEdit
  5. Kopieren der erzeugten mo-Dateien in das jeweils zugehörige Sprachverzeichnis: z.B. <Verzeichnis der exe-Datei>\locale\de\LC_MESSAGES\
  6. Einbetten der Übersetzungen in die ausführbare Dateien

Die aktuelle Version 3.1 bietet außerdem noch folgende zusätzliche Möglichkeiten:

Hilfsprogramme

Außerdem werden einige Hilfsprogramme zur Bearbeitung von po-Dateien bereit gestellt:

Downloads:

Delphi-10-Version von GgtTranslate Vers. 3.1.0 (26.11.2023):

ggt-translate-setup - Programmpaket mit alle oben aufgeführten Zusatzprogrammen und Erweiterungen (9,96 MB)
dxgettext-setup - Programmpaket mit den ursprünglichen Funktionen von DxGetText in aktualisierter Form (5,89 MB)
Gnu GetText Handbuch - Programmdokumentation von Lars B. Dybdahl, u.a.
Quelltexte aller beschriebenen Programme (3,98 MB)

Delphi-7-Version von GgtTranslate:

Diese Version erfordert eine vorherige Installation von DxGetText (s.u.).
dxgettext-update (849 kB) Quelltexte (114 kB)

Originalversion von DxGetText:

GNU gettext for Delphi (5,2 MB)
Hinweis: Diese Version ist von 2008 und nicht mehr lauffähig unter Windows 11. Als Ersatz wird das o.g. Paket dxgettext-setup empfohlen.

Vorlagen und deutsche Übersetzungen für Delphi-Bibliotheken:

Delphi 10 Seattle* (1,01 MB) Delphi-XE2* (501 kB) Delphi 7 (368 kB) Indy 10* (513 kB)
* enthält auch unvollständige Übersetzungen für Französisch, Spanisch, Italienisch, Portugiesisch Niederländisch, Polnisch, Russisch und Ungarisch


Versionsinformationen für Delphi bearbeiten

Die Verwaltung der Versionsinformationen einer Anwendung über die Projektoptionen ist bei älteren Delphi-Versionen (z.B. Delphi 10 Seattle oder Delphi XE2) unkomfortabel und teilweise auch fehlerhaft. Die Vererbung von Einstellungen funktioniert unzuverlässig und beim Kompilieren für verschiedene Plattformen (z.B. Win32 und Win64) wird die Ressourcen-Datei <Projektname>.res nicht jeweils neu erstellt, sodass Plattform-abhängige Einstellungen nicht richtig in die exe-Datei übernommen werden.

Das letztere Problem lässt sich nur umgehen, indem man für jede Plattform eine eigene Ressourcen-Datei erstellt. Dazu schaltet man in dem Projektoptionen die Übernahme der Versionsinformationen aus und erstellt passende Ressourcen-Quelltexte (rc-Dateien) mit einem Texteditor. Diese müssen dann noch von Hand kompiliert werden, um die benötigten res-Dateien für die Projekterstellung zu erzeugen. Bei vielen Projekten wird das dann schnell sehr mühsam.

Das vorliegende Programm zum Bearbeiten von Projektversions-Ressourcen fasst alles unter eine Oberfläche zusammen. Man kann mit ihm alle Projekte einer Projektgruppe gemeinsam bearbeiten. Nach Auswahl einer Gruppendatei (groupproj-Datei) werden alle dazugehörigen Projekte (dproj-Dateien) erkannt und in einer Liste angezeigt. Sind darin Projekte enthalten, die noch nicht bearbeitet wurden, werden, sofern vorhanden, die Versions-Informationen aus der jeweiligen dproj-Datei geladen. Die benötigte rc-Datei wird auf Basis einer, vom Benutzer bearbeitbaren Textvorlage erstellt. Die individuellen Angaben sind dort als Platzhalter eingetragen und werden vom Programm automatisch durch die vom Benutzer gemachten Projektangaben. z.B. Versionsnummer ersetzt. Die aktuellen Werte werden für jede Projektgruppe in einer Datei mit der Erweiterung vprj im Verzeichnis des Projektes abgespeichert.
Nach Klick auf Ressourcen-Dateien erzeugen wird auf diese Weise für alle in der Liste markierten Projekte jeweils eine rc-Datei für die ausgewählten Plattformen (Windows 32- und 64-Bit) mit einem einstellbaren Dateinamen-Suffix (Vorgabe: -32 und -64) erstellt und dann automatisch mit dem Borland-Ressourcencompiler bcc32c.exe in eine res-Datei übersetzt. Für die rc-Dateien kann optional ein Unterverzeichnis im Projektverzeichnis eingestellt werden (Standardvorgabe: Resources).

Erforderliche Änderungen in den Delphi-Quellprogrammen: Im Quelltext der Projekt-Datei (dpr-Datei) müssen folgende Zeilen nach {$R *.res} eingefügt werden:

{$IFDEF WIN32}
  {$R *-32.res}
{$ELSE}
  {$R *-64.res}
{$ENDIF}

Screenshots:

Programm Einstellungen Vorlage

Download (Vers. 1.0.4 v. 15.11.2023):


Starthilfe für Delphi

Ab Delphi XE gibt es nicht nur die Möglichkeit, die Entwickleroberfläche in der Sprache umzuschalten, sondern auch die Sprache der für eigene Anwendungen verwendeten Bibliotheken (z.Zt. englisch, deutsch und französisch). Wenn man eine mehrsprachige Anwendung entwickelt (siehe auch), ist es zu empfehlen, alle Texte in Englisch zu verfassen. Die verwendeten Dialoge, Fehlermeldungen, etc. aus den Systembibliotheken sollen dann natürlich auch in Englisch erscheinen. Bei Anwendungen, die ausschließlich z.B. für den deutschen Raum entwickelt werden, benötigt man stattdessen die entsprechenden deutschsprachigen Bibliotheken.

Leider kann diese Umschaltung nicht aus der Entwicklungsumgebung heraus gemacht werden. Embarcadero stellt ein kleines Hilfsprogramm (BDSSetLang.exe) zur Verfügung, mit dem sich dies bewerkstelligen lässt. Erst anschließend kann die IDE gestartet werden.

Das Programm Start Delphi kombiniert diese Umschaltung nun mit einer einfachen Projektverwaltung:

Beim ersten Start des Programms wird automatisch ermittelt, welche Delphi-Versionen (Delphi XE, XE2, ..., XE8, Delphi 10.0, ..., 10.4 oder 11.0) auf dem System installiert sind. Die verfügbaren Versionen werden in einer Liste auf der Seite Einstellungen angezeigt. Der Benutzer wählt daraus die Version aus, mit der er arbeiten möchte. Alle Benutzereinstellungen werden in einer ini-Datei gespeichert. Über die Befehlszeile können auf diese Weise durch Angabe verschiedener ini-Dateien auch mehrere Konfigurationen nebeneinander verwaltet werden, so dass es möglich ist, auch verschiedene Delphi-Versionen gleichzeitig zu verwenden.

Für die Sprachen Deutsch, Englisch und Französisch werden getrennte Projektlisten verwaltet. Neue Projekte werden durch Auswahl der zugehörigen Projektdateien (.dproj) oder Projektgruppen (.groupproj) der jeweiligen Liste hinzugefügt. Nach Klick auf die Start-Schaltfläche wird die vom Benutzer ausgewählte Delphi-Version mit den ausgewählten Sprachen für die Benutzeroberfläche und die Bibliotheken gestartet und das ausgewählte Projekt geladen. Durch Klick auf die Titelleiste der Projektliste kann die Anzeigereihenfolge verändert werden (alphabetisch oder nach Zeitstempel).

Hintergrundinformationen: Die Einstellung der Bibliothekssprache erfolgt unter dem Registry-Key: HKEY_CURRENT_USER\Software\Embarcadero\BDS\<version>\MUI. Der Wert für Translated Library Directory wird entweder auf EN, DE oder FR eingestellt. Der Wert für <version> ist je nach Delphi-Version zu ersetzen durch:
XE:8.0  10.0 Seattle:17.0 
XE2:9.0  10.1 Berlin:18.0 
XE3:10.0  10.2 Tokyo:19.0 
XE4:11.0  10.3 Rio:20.0 
XE5:12.0  10.4 Sydney:21.0 
XE6:14.0  11.1 Alexandria:22.0 
XE7:15.0 
XE8:16.0 

Download (Vers. 2.6.1 v. 15.11.2023):


Unit-Analysator für Delphi-Projekte

Beim Programmieren von Delphi-Projekten verwendet man viele Funktionen, die sich in selbst erstellten Units befinden. Diese sind meistens nicht im Projektverzeichnis angesiedelt, sondern befinden sich an verschiedenen anderen Stellen. Die Suchpfade dorthin werden in den Projektoptionen angegeben.

Wenn man nun ein Projekt oder auch eine Unit im Quelltext weiter geben möchte, stellt sich immer das Problem, welche Units werden benötigt und müssen beigefügt werden. Delphi bringt selbst kein Werkzeug mit, mit dem sich dies übersichtlich machen lässt.

Das Programm UnitParser hilft hier weiter. Für Projekte mit dproj-Dateien ist es ab Delphi 2007 verwendbar, für dpr- oder pas-Dateien auch für ältere Delphi-Versionen.

Eventuell in den Suchpfaden vorhandene Platzhalter ($(Config), $(Platform) und $(LANGDIR)) werden durch die im Programm gemachten Einstellungen ersetzt. Durch Klick auf die Schaltfläche rechts neben dem Suchpfad, können die Angaben vom Benutzer angepasst werden.
Nach einem Klick auf Projekt durchsuchen analysiert das Programm in allen verwendeten Units die Uses-Klauseln und erstellt eine nach Pfaden sortierte Liste aller im Projekt verwendeten Units. System-Units sind dabei ausgenommen. Ebenfalls in die Liste aufgenommen werden Include-Dateien ({$I ..}) und eingebundene Object-Dateien ({$L ..}.

Anschließend kann man alle oder einige ausgewählte Units in ein beliebiges Zielverzeichnis kopieren, üblicherweise ist dies das Unterverzeichnis sources des Projektes. Units, die sich nicht im Projektverzeichnis befinden, werden dort in ein Unterverzeichnis Units kopiert. Zuletzt wird die Hauptdatei (dpr) kopiert, wobei die dort enthaltenen Pfade für die Units entsprechend angepasst werden, sowie die zugehörigen Ressourcendateien.

Download (Vers. 3.9.7 v. 09.08.2023):



Hilfsmittel zur Erzeugung von Installationsarchiven

Um dem Anwender die Installation eines neuen Programms möglichst einfach zu machen, wird dies am Besten mit allen seinen Komponenten in ein platzsparendes Archiv gepackt. Dadurch wird ein schnelles Download gewährleistet. Um auch die Installation komfortabel zu gestalten, sollte dieses Archiv selbst extrahierend sein, damit kein Zusatzprogramm zum Entpacken nötig ist. Wichtig ist auch, dass während der Installation individuelle Einstellungen (wie. z.B. das Programmverzeichnis oder Einträge im Startmenü oder auf dem Desktop) vom Benutzer vorgenommen werden können.

Verwendung von Inno-Setup

Neben kommerziellen Programmen wie z.B. InstallShield oder Wyse hat sich hierfür das Freeware-Programm Inno-Setup bewährt. Durch eine sehr leistungsfähige Skript-Sprache können hiermit fast alle Anforderungen erfüllt werden.

1. Beispiel - Installation von WinBib

Beschreibung der einzelnen Abschnitte:
Setup
Hier findet man die globalen Einstellungen, wie Name der Anwendung, Autor, Name der Installations-Datei
Languages
Hier wird angegeben, welche Sprachen bei der Installation ausgewählt werden können
CustomMessages
Individuelle Installationshinweise in den verwendeten Sprachen
Tasks
Zusätzliche Aufgaben bei der Installation, wie z.B. Anlegen eines Desktop-Icons oder Einrichten von Verknüpfungen zu bestimmten Dateitypen
Registry
In die Registry einzutragende Werte, wobei hier der Name des Schlüssels durch eine unter Code eingefügte Funktion in Pascal-artiger Syntax ermittelt wird.
Files
Für die Installation benötigte Dateien.
Icons
Einträge im Startmenü und auf dem Desktop.
Run
Nach der Installation zu startendes Programm.
Code
Zusätzliche Benutzerfunktionen.

2. Beispiel - Installation zur Nutzung eines serverseitig installierten MikTeX

Beschreibung der Verfahrensweise:

  1. In dem Beispiel wird davon ausgegangen, dass auf einem Server das vollständige MikTeX installiert ist. Die Serverfreigabe ist auf dem lokalen Rechner als Netzlaufwerk P: angebunden. Auf der gleichen Serverfreigabe befindet sich auch eine GhostScript-/GhostView-Installation.
  2. Auf dem lokalen Rechner wird von einem Administrator die mit dem o.g. Inno-Setup-Skript erzeugte Installation Admin-MiKTeX-From-Server-Setup.exe gestartet. Sie nimmt alle erforderlichen Einstellungen in der Registry, der Programm-Umgebung und im Startmenü (All users) vor.
  3. Der Administrator installiert einen Editor, wie. z.B. TeXnicCenter.
  4. Der jeweilige Benutzer muss nach der Anmeldung im Startmenü das Programm MikTeX > Settings starten und die erforderlichen lokalen Datenbanken erzeugen: Schaltflächen Refresh FNDB und Update Formats.

Einfügen einer Versionsinfo in den Namen der Installationsdatei

Bei Programmen, die sich noch in der Weiterentwicklung befinden, ist es nützlich, aus dem Dateinamen der Installationsdatei die Versionsnummer zu erkennen. Mit einiger Kenntnis der in InnoSetup verwendeten Scriptsprache kann man das in das Installationsskript integrieren. Wem das zu kompliziert ist, der kann auf das nachfolgend beschriebene kleine Delphi-Befehlszeilenprogramm zurückgreifen. Es lässt sich sehr einfach in eine Batch-Datei integrieren.

Batch-Datei zur Erzeugung des Installationsarchivs:

rem InnoSetup starten
"%ProgramFiles%\Inno Setup 5\Compil32.exe" /cc htred.iss
rem Versionsinfo in Dateinamen einfügen
\Delpi-Utils\AddVersionToName.exe "..\Release\Win32\HtRed.exe" htred-setup.exe 3

Das Programm AddVersionToName benötigt folgende Angaben in der Befehlszeile:

AddVersionToName <ExeFile> <InstallFile> [<Level>]

Es liest dann aus der Exe-Datei die Versionsnummer aus (siehe z.B. Projekt-Eigenschaften bei Delphi) und benennt die Installations-Datei entsprechend um.

Ein zweites Programm CopyVersionFile kopiert zusätzlich zur Umbenennung die Datei in ein oder mehrere Verzeichnisse für die Softwareverteilung.

Download der Programme (Quelltexte und Exe-Dateien) (57,2 kB)

Eine Weiterentwicklung dieser beiden kleinen Programm wird im nächsten Abschnitt beschrieben.



Verteilung von Softwarepaketen

Die Erstellung und Verteilung von Softwarepaketen erfordert immer wieder die gleiche Abfolge von Operationen, so dass sich eine Automatisierung anbietet:

  1. Integration der Sprachpakete nach einer Neu-Compilierung
  2. Erstellen der Installationsdatei mit InnoSetup (s.o.)
  3. Einfügen der Versionsnummer in den Namen der Installationsdatei
  4. Kopieren der Installationsdatei und ev. weiterer Dateien auf den Download-Server
  5. Anpassen der Download-Webseite

Beispiel einer Batch-Datei für einen automatischen Ablauf:

echo Sprachdateien aktualisieren
copy /y ..\languages\de\default.mo ..\Release\Win32\locale\de\LC_MESSAGES\
rem copy /y ... für weitere Sprachpakete

echo.
echo InnoSetup starten
"%ProgramFiles%\Inno Setup 6\Compil32.exe" /cc pb6.iss
echo InnoSetup fertig

rem Archiv für Update aktualisieren
"%ProgramFiles%\7-Zip\7z.exe" u -r pb-update-6.zip @pb-files.txt

rem Setup versionieren und verteilen
"%ProgramFiles%\Utilities\VersionCopy.exe" PersBackup-6.vcj /f

Die Schritte 3 - 5 werden dabei von dem Programm VersionCopy ausgeführt.


VersionCopy

Die Funktionen im Überblick:

Verfahrensweise:

Zunächst werden im interaktiven Modus mit dem Programm geeignete Aufträge erstellt und gespeichert.
Mit der Schaltfläche "Testen" kann die Funktionsweise geprüft werden, ohne dass irgendwelche Daten tatsächlich verändert oder kopiert werden. Der Ablauf wird im Status-Fenster angezeigt und gleichzeitig auch in eine Protokolldatei geschrieben ("VersionCopy.log" im Verzeichnis "Anwendungsdaten").
Wenn alles richtig aussieht, kann durch Klick auf die Taste "Starte Kopieren" der Auftrag real ausgeführt werden.
Aufruf über die Befehlszeile:
Der Kopiervorgang kann auch direkt über die Befehlszeile gestartet werden (siehe auch die Batch-Datei weiter oben):
<Pfad>\VersionCopy.exe <Auftrag> /force

Downloads:


Grund-Einstellungen

Exe-Datei mit Versionsinfo:
Dies kann eine mit einer beliebigen Programmentwicklungsumgebung erstellte Datei sein. Sie muss die üblichen Versionsinformationen in ihren Ressourcen enthalten (unter Delphi wird das über die Projektoptionen eingestellt).
Setup-Datei:
Dies ist das mit einem Installer (z.B. Inno-Setup) erstellte Installationspaket, das zum Download bereitgestellt werden soll.
Benutzte Versionsebene:
Hier wird eingestellt, wie die Versionsinformation weiter gegeben werden soll. Es sind maximal 4 Stufen möglich: Setup-1, Setup-1.2, Setup1.2.03 oder Setup-1.2.0304
Vorversion behalten:
Hier wird eingestellt, welche im Downloadbereich befindlichen älteren Versionen gelöscht werden sollen. Wird z.B. Ebene 1 gewählt, werden Setup-Dateien nur dann erhalten wenn sich die erste Versionsstufe ändert (setup-1... auf setup-2..).
Projekt-Präfix:
Hier wird die Projektkennzeichnung für die Bearbeitung der HTML-Vorlagen eingestellt (siehe).

FTP-Einstellungen

Hier werden die Zugangsdaten für die verwendeten FTP-Server eingestellt.

Dateien

Versionsinfo-Dateien:
Name der Dateien, die die Informationen zur aktuellen Version und zum Download bereitstellen (siehe unten)
Setup-Datei:
Setup mit Versionsnummer (wird vom Programm erzeugt)
Erzeuge Datei mit Prüfsummen (MD5 und SHA256)
Auswählen, wenn der MD5-und der SAH256-Wert jeweils in eine Datei <Setupname>.md5/sha256 geschrieben werden soll
Erzeuge OpenPGP-Signatur Bei der Auswahl dieser Option wird nach der Schlüssel-ID des zu verwendenden OpenPGP-Schlüssels gefragt. Eine Installation von GnuPGP ist erforderlich, um diese Funktion zu nutzen. Die erzeugt Signatur wird in die Datei <Setupname>.sig geschrieben.
Zusätzliche Dateien:
Hier können beliebige Dateien, z.B. mit Update-Informationen ausgewählt werden, die zum Download bereitgestellt werden sollen. Auf Wunsch kann den Dateien automatisch das Projekt-Präfix vorangestellt werden.

Ziele

Verzeichnisse:
Hier können beliebige Verzeichnisse im Windows-Dateisystem ausgewählt werden, in die die oben genannten Dateien und das Setup kopiert werden sollen. Die Versionsinformation wird nur in die markierten Verzeichnisse kopiert.
Ziele auf FTP-Server
Hier können beliebige Verzeichnisse auf den oben festgelegten FTP-Servern ausgewählt werden, in die die Dateien und das Setup kopiert werden sollen. Die Versionsinformation wird nur in die markierten Verzeichnisse kopiert.

HTML-Seiten

Es werden die weiter unten beschrieben HTML-Vorlagen ausgewählt, die vom vom Programm aktualisiert und per FTP in die ausgewählten Verzeichnisse kopiert werden.


Erforderliche Vorlagen

  1. Vorlage für die auf dem Webserver bereitgehaltene Versionsinfo für die automatische Prüfung auf Updates.
  2. Vorlage für die Download-Webseite, die vom Programm automatisch aktualisiert wird.

Vorlagen für Versionsinformation

Dabei handelt es sich um zwei kleine Textdateien. Die erste enthält die Versionsinfo, die zweite den Downloadort.

Version:

1. Zeile: <Platzhalter für Version>

Download:

1. Zeile: <URL-Pfad für Download>
2. Zeile: <Platzhalter für Setup-Datei>

Fest vorgegeben wird nur die Zeile mit dem Downloadpfad, die anderen Zeilen werden vom Programm eingefügt.
 
Beispiel:
pb-setup-6.ver

6.2.16.0

pb-setup-6.loc

https://personal-backup.rathlev-home.de/download/
pb-setup-6.2.1600.exe
 

Vorlage für die Download-Webseite

Es handelt sich dabei um eine gewöhnliche HTML-Seite mit einigen speziellen Erweiterungen und Platzhaltern. Diese werden benötigt, damit das Programm VersionCopy an den gewünschten Stellen die aktuellen Informationen einsetzen kann.
Format-Einstellungen:
date-format   = <mode>   0 - internationales Datumsformat
1 - deutsches Datumsformat
2 - englisches Datumsformat
decimal-sep   = <char>   Standardmäßig wird als Dezimaltrenner für die Größenangabe (s.u.) der Punkt
verwendet. Mit <char> = , wird das auf das Komma umgestellt.
Platzhalter:
Ein Platzhalter hat die Form [%<pf>-<name>] und kann an beliebiger Stelle im HTML-Text eingefügt werden. Er wird durch den Wert ersetzt, der ihm im Header zugewiesen ist.

pf   Projekt-Präfix (ein oder mehrere Zeichen, in VersionCopy einstellbar)
name = vers
= date
= setup
= size
= md5
= sha256
Versionsnummer (z.B. 6.2.16.0)
Datum der zur Bereitstellung (z.B. 19.8.2022)
Name der Download-Datei (z.B. program-6.2.1600.exe)
Größe der Download-Datei (z.B. 17,2 MB)
MD5-Wert der Download-Datei (32 Zeichen, z.B. 998ebb92...)
SHA256-Wert der Download-Datei (64 Zeichen, z.B. a15cc1ae...)
Header:

Der HTML-Datei wird ein Header vorangestellt, der die Informationen für alle Platzhalter enthält:

<!-- #var
<pf>-<name> = <wert>
...
-->

VersionCopy passt die Werte im Header, die zu dem Projekt-Präfix passen, automatisch an und ersetzt anschließend die Platzhalter im Text durch die aktuellen Werte.

Beispiel:

 


Überprüfen und Entpacken von InnoSetup-Archiven

Manchmal möchte man gerne ein erstelltes InnoSetup-Archiv überprüfen oder Dateien daraus extrahieren. Dazu gibt es das Konsolenprogramm Inno Setup Unpacker. Wem die Bedienung etwas zu unkomfortabel ist, kann sich weiter unten eine Windows-GUI dafür herunterladen.

Das zu verarbeitende ausführbare Setup kann über einen Datei-Dialog, per Drag&Drop oder durch Angabe in der Befehlszeile geladen werden. Danach werden sofort die grundlegenden Datei-Informationen und eine Liste der enthaltenen Dateien angezeigt. Zum Extrahieren von Dateien genügt ein Klick auf die entsprechende Schaltfläche und die Auswahl des Zielverzeichnisses. Optional kann ein Filter angegeben werden, um nur die dazu passenden Dateien zu extrahieren.

Download:

Windows InnoUnpacker 1.9.2 v. Januar 2024 (Deutsch, Englisch, Französisch, Italienisch und Ungarisch) - geeignet für Installationspakete erzeugt mit InnoSetup 5 und 6

Unicode-Version des Konsolenprogramms Inno Setup Unpacker - für Inno Setup 2.0.7 bis 6.2
Diese Version kann als Ersatz für innounp 0.50 verwendet werden, wenn es dort Probleme mit der Unicode-Codierung gibt.