Inhaltsverzeichnis
WvdS Shell installieren: Von null bis zur laufenden Anwendung
WvdS Shell ist ein nativer Windows-Anwendungshost für Business-Extensions — gebaut auf Free Pascal und LCL. Diese Anleitung zeigt in fünf Schritten, wie Sie aus dem Quellcode einen Installer bauen, der auf einem sauberen Windows-Rechner sofort läuft.
Bevor Sie starten
Sie brauchen zwei Werkzeuge auf Ihrem Entwicklungsrechner:
- Lazarus / Free Pascal — kompiliert WvdSShell.exe aus dem Quellcode
- Inno Setup 6 — baut den Installer (kostenloser Download)
Auf dem Zielrechner ist keines davon nötig. Der fertige Installer bringt alles mit.
Schritt 1: Den Release-Build kompilieren
Öffnen Sie eine PowerShell und starten Sie den Build:
C:\Lazarus\lazbuild.exe WvdSShell.lpi ` --build-mode=Release ` --build-all ` --recursive
Die kompilierten Dateien landen unter binaries\WvdS.Shell\x86_64-win64\Release\.
Prüfen Sie, ob der Build vollständig ist. Im Release-Ordner müssen mindestens diese Dateien liegen:
WvdSShell.exeundWvdSShellHelper.exe— die Anwendung selbstlibcef.dllundchrome_elf.dll— die Chromium-WebView-Enginelibcrypto-3-x64.dll— OpenSSL 3 für Post-Quantum-Kryptographieapp.config.jsonundcodicon.ttf— Konfiguration und Icon-Font- Die Ordner
locales/undbuiltins/— Sprachdaten und eingebaute Extensions
Falls Dateien fehlen, prüfen Sie die Lazarus-Build-Ausgabe auf Fehler.
Schritt 2: Das Setup-Skript erstellen
Legen Sie eine neue Datei WvdSShell-Setup.iss an. Dieses Skript sagt dem Inno-Setup-Compiler, welche Dateien der Installer verpackt, wohin er sie kopiert und welche Verknuepfungen er anlegt. Wir bauen es Sektion fuer Sektion auf.
2a. Kopfbereich: Variablen definieren
Am Anfang des Skripts legen Sie Variablen fuer Name, Version und Pfade fest. Passen Sie ReleaseDir an Ihren tatsaechlichen Build-Pfad an — alle weiteren Sektionen greifen darauf zurueck.
; WvdSShell Setup Script ; Inno Setup 6.x #define AppName "WvdS Shell" #define AppVersion "1.0.0" #define AppPublisher "EMSR DATA, d.o.o." #define AppURL "https://www.wvds.at" #define AppExeName "WvdSShell.exe" ; ── Anpassen: Pfad zum Release-Build aus Schritt 1 ────────────────────────── #define ReleaseDir "D:\Workspace\repos\binaries\WvdS.Shell\x86_64-win64\Release"
2b. [Setup]: Installer-Einstellungen festlegen
Die [Setup]-Sektion bestimmt, wohin installiert wird, wie komprimiert wird und welche Windows-Versionen unterstuetzt sind.
[Setup] AppId={{A1B2C3D4-E5F6-7890-ABCD-EF1234567890} AppName={#AppName} AppVersion={#AppVersion} AppPublisher={#AppPublisher} AppPublisherURL={#AppURL} AppSupportURL={#AppURL} AppUpdatesURL={#AppURL} DefaultDirName={autopf}\EMSR DATA\WvdS Shell DefaultGroupName={#AppName} AllowNoIcons=yes OutputDir=D:\Workspace\release-packages OutputBaseFilename=WvdSShell-Setup-{#AppVersion} SetupIconFile={#ReleaseDir}\WvdSShell.exe Compression=lzma2/max SolidCompression=yes ArchitecturesAllowed=x64compatible ArchitecturesInstallIn64BitMode=x64compatible MinVersion=10.0 PrivilegesRequired=admin WizardStyle=modern WizardResizable=yes [Languages] Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "english"; MessagesFile: "compiler:Default.isl"
Wichtige Einstellungen im Ueberblick:
DefaultDirName— der Zielordner auf dem Benutzerrechner (C:\Program Files\EMSR DATA\WvdS Shell)MinVersion=10.0— CEF benoetigt mindestens Windows 10PrivilegesRequired=admin— systemweite Installation benoetigt Admin-RechteCompression=lzma2/max— bestmoegliche Kompression fuer das ~150 MB-Paket
2c. [Tasks]: Optionale Aufgaben anbieten
Tasks sind Optionen, die der Benutzer im Setup-Wizard an- oder abwaehlen kann.
[Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" Name: "autostart"; Description: "WvdS Shell beim Systemstart starten"; GroupDescription: "Systemstart"; Flags: unchecked
Der Autostart ist standardmaessig deaktiviert (Flags: unchecked) — der Benutzer muss ihn bewusst einschalten.
2d. [Files]: Dateien in den Installer packen
Die [Files]-Sektion ist das Herzstuck des Skripts. Hier listen Sie jede Datei auf, die der Installer verpacken soll. Wir gehen Gruppe fuer Gruppe vor.
Beginnen Sie die Sektion mit dem Schluesselwort [Files] und fuegen Sie dann die folgenden Bloecke nacheinander ein.
Hauptanwendung und Konfiguration
Diese vier Dateien bilden den Kern der Installation:
[Files] ; ── Hauptanwendung ──────────────────────────────────────────────────────────── Source: "{#ReleaseDir}\WvdSShell.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\WvdSShellHelper.exe"; DestDir: "{app}"; Flags: ignoreversion ; ── Konfiguration und Schriften ─────────────────────────────────────────────── Source: "{#ReleaseDir}\app.config.json"; DestDir: "{app}"; Flags: ignoreversion onlyifdoesntexist Source: "{#ReleaseDir}\codicon.ttf"; DestDir: "{app}"; Flags: ignoreversion
WvdSShellHelper.exeist der CEF-Subprocess — ohne ihn startet die WebView nichtapp.config.jsonhat das Flagonlyifdoesntexist: Bei einem Update bleibt die vorhandene Konfiguration erhalten
OpenSSL 3.x
Eine einzige DLL fuer die Post-Quantum-Kryptographie (ML-DSA, ML-KEM):
; ── OpenSSL 3.x (Post-Quantum Kryptographie) ───────────────────────────────── Source: "{#ReleaseDir}\libcrypto-3-x64.dll"; DestDir: "{app}"; Flags: ignoreversion
Chromium Embedded Framework (CEF)
CEF ist die WebView-Engine. Die Kern-DLLs muessen direkt neben WvdSShell.exe liegen:
; ── CEF-Kern (Rendering-Engine) ────────────────────────────────────────────── Source: "{#ReleaseDir}\libcef.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\chrome_elf.dll"; DestDir: "{app}"; Flags: ignoreversion
libcef.dll allein macht rund 100 MB aus — das ist der groesste Anteil am Installer.
GPU-Unterstuetzung: OpenGL, DirectX und Vulkan
Diese DLLs ermoeglichen hardwarebeschleunigtes Rendering. Auf Rechnern ohne GPU springt der Vulkan-Software-Renderer als Fallback ein:
; ── OpenGL / DirectX ───────────────────────────────────────────────────────── Source: "{#ReleaseDir}\libEGL.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\libGLESv2.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\d3dcompiler_47.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\dxcompiler.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\dxil.dll"; DestDir: "{app}"; Flags: ignoreversion ; ── Vulkan Software-Renderer (Fallback ohne GPU) ──────────────────────────── Source: "{#ReleaseDir}\vk_swiftshader.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\vk_swiftshader_icd.json";DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\vulkan-1.dll"; DestDir: "{app}"; Flags: ignoreversion
CEF-Ressourcen und Sprachdateien
Chromium benoetigt Unicode-Daten, UI-Ressourcen und einen V8-Snapshot. Die Sprachdateien liegen in einem eigenen Unterordner:
; ── CEF-Ressourcen ─────────────────────────────────────────────────────────── Source: "{#ReleaseDir}\icudtl.dat"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\resources.pak"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\chrome_100_percent.pak"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\chrome_200_percent.pak"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ReleaseDir}\v8_context_snapshot.bin";DestDir: "{app}"; Flags: ignoreversion ; ── CEF-Sprachdateien (alle locales) ──────────────────────────────────────── Source: "{#ReleaseDir}\locales\*"; DestDir: "{app}\locales"; Flags: ignoreversion recursesubdirs
Die zwei chrome_*_percent.pak-Dateien enthalten UI-Ressourcen fuer Standard- und High-DPI-Displays.
Eingebaute Erweiterungen (Builtins)
Die mitgelieferten Extensions (Themen, Workbench, System) werden als kompletter Ordnerbaum kopiert:
; ── Eingebaute Erweiterungen ────────────────────────────────────────────────── Source: "{#ReleaseDir}\builtins\*"; DestDir: "{app}\builtins"; Flags: ignoreversion recursesubdirs createallsubdirs
Das Flag createallsubdirs sorgt dafuer, dass auch leere Unterordner angelegt werden — einige Extensions erwarten bestimmte Verzeichnisse.
2e. [Dirs]: Benutzerverzeichnisse anlegen
WvdS Shell speichert Erweiterungen und Logs im lokalen Benutzerprofil. Diese Ordner legt der Installer vorab an — ohne Admin-Rechte, da %LOCALAPPDATA% dem Benutzer gehoert.
[Dirs] Name: "{localappdata}\.wvdx\extensions" Name: "{localappdata}\.wvdx\logs"
2f. [Icons] und [Registry]: Verknuepfungen und Systemintegration
Zuletzt richten Sie Startmenue-Eintraege, Desktop-Icon und optionalen Autostart ein.
[Icons] Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}" Name: "{group}\{#AppName} deinstallieren"; Filename: "{uninstallexe}" Name: "{autodesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon [Registry] ; Autostart (nur wenn der Benutzer die Task gewaehlt hat) Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "{#AppName}"; ValueData: """{app}\{#AppExeName}"""; Flags: uninsdeletevalue; Tasks: autostart ; App-Pfad: ermoeglicht Start ueber Win+R → "WvdSShell" Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WvdSShell.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\{#AppExeName}"; Flags: uninsdeletekey [Run] Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(AppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [UninstallDelete] ; Benutzerdaten bewusst NICHT loeschen — bei Bedarf einkommentieren: ; Type: filesandordirs; Name: "{localappdata}\.wvdx"
Die [Run]-Sektion bietet dem Benutzer am Ende des Setups an, WvdS Shell sofort zu starten. Das Desktop-Icon und der Autostart-Eintrag werden nur angelegt, wenn der Benutzer die entsprechende Task in Schritt 2c gewaehlt hat.
Schritt 3: Den Installer kompilieren
Uebergeben Sie das Skript an den Inno-Setup-Compiler:
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "WvdSShell-Setup.iss"
Alternativ: Oeffnen Sie die .iss-Datei per Doppelklick in der Inno Setup IDE und waehlen Sie Build > Compile.
Der fertige Installer liegt danach unter:
D:\Workspace\release-packages\WvdSShell-Setup-1.0.0.exe
Schritt 4: Den Installer testen
Starten Sie WvdSShell-Setup-1.0.0.exe auf einem sauberen Windows 10 oder 11 (64-Bit). Der Installer braucht keine Vorinstallation — alle Abhaengigkeiten sind enthalten.
Nach der Installation und dem ersten Start von WvdS Shell passiert automatisch:
- WvdS Shell legt
%LOCALAPPDATA%\.wvdx\an (Benutzerdaten) - Die Logdatei
%LOCALAPPDATA%\.wvdx\logs\wvds-shell.logwird erstellt - Die eingebauten Erweiterungen aus
builtins\werden gescannt und registriert - Der Willkommens-Tab oeffnet sich
Schritt 5: Eigene Extensions hinzufuegen
Sobald WvdS Shell laeuft, gibt es zwei Wege, um Erweiterungen zu installieren:
- Kommandozeile:
WvdSShell.exe –install <pfad.wvdx> - Grafisch: Ueber den eingebauten Extension-Manager (erreichbar ueber die Activity Bar)
Die Erweiterungen landen unter %LOCALAPPDATA%\.wvdx\extensions\.
Fuer Fortgeschrittene
Node.js in den Installer einbinden
WvdS Shell braucht Node.js als Extension-Host fuer JavaScript-Extensions. Ohne Node.js laeuft die Shell trotzdem, aber JS-Extensions sind nicht verfuegbar.
Es gibt drei Wege, damit umzugehen — je nach Deployment-Szenario:
Variante A: Nur pruefen und warnen (empfohlen)
Die einfachste Loesung: Der Installer prueft beim Start, ob Node.js installiert ist, und zeigt einen Hinweis, falls nicht. Die Installation wird nicht blockiert.
Fuegen Sie diese [Code]-Sektion am Ende Ihres ISS-Skripts ein:
[Code] function NodeJsInstalled: Boolean; var Version: String; begin Result := RegQueryStringValue(HKLM, 'SOFTWARE\Node.js', 'Version', Version); end; function InitializeSetup: Boolean; begin Result := True; if not NodeJsInstalled then begin MsgBox( 'Node.js ist nicht installiert.' + #13#10 + 'Bitte Node.js 20 LTS (oder neuer) von https://nodejs.org installieren.' + #13#10 + 'Die Shell laeuft auch ohne Node.js, aber JS-Extensions sind nicht verfuegbar.', mbInformation, MB_OK); end; end;
Wann sinnvoll: Fuer die meisten Szenarien. Der Benutzer installiert Node.js selbst ueber nodejs.org oder den IT-Administrator.
Variante B: Node.js-Setup als Prerequisite ausfuehren
Der Installer bringt das offizielle Node.js-MSI mit und fuehrt es vor der eigentlichen Installation aus — aber nur, wenn Node.js noch nicht vorhanden ist.
Schritt 1: Laden Sie das Node.js-MSI herunter und legen Sie es neben Ihr ISS-Skript:
# Node.js 22 LTS (x64) herunterladen Invoke-WebRequest -Uri "https://nodejs.org/dist/v22.14.0/node-v22.14.0-x64.msi" ` -OutFile "node-v22.14.0-x64.msi"
Schritt 2: Fuegen Sie das MSI in die [Files]-Sektion ein. Es wird nur temporaer entpackt:
; ── Node.js Prerequisite (temporaer) ──────────────────────────────────────── Source: "node-v22.14.0-x64.msi"; DestDir: "{tmp}"; Flags: deleteafterinstall; Check: not NodeJsInstalled
DestDir: „{tmp}“— die Datei landet im temporaeren Verzeichnis, nicht im Installationsordnerdeleteafterinstall— nach der Installation wird das MSI automatisch geloeschtCheck: not NodeJsInstalled— das MSI wird nur entpackt, wenn Node.js fehlt
Schritt 3: Fuegen Sie einen [Run]-Eintrag hinzu, der das MSI vor dem ersten Start der Shell ausfuehrt:
[Run] ; Node.js installieren (nur wenn nicht vorhanden, vor Shell-Start) Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\node-v22.14.0-x64.msi"" /passive /norestart"; \ StatusMsg: "Node.js wird installiert..."; Check: not NodeJsInstalled; \ Flags: shellexec waituntilterminated
/passive— zeigt einen Fortschrittsbalken, fragt aber nichts/norestart— verhindert einen Neustart nach der Node.js-Installationwaituntilterminated— der Installer wartet, bis das MSI fertig ist
Schritt 4: Die [Code]-Sektion fuer die Prueffunktion bleibt gleich wie in Variante A:
[Code] function NodeJsInstalled: Boolean; var Version: String; begin Result := RegQueryStringValue(HKLM, 'SOFTWARE\Node.js', 'Version', Version); end;
Wann sinnvoll: Fuer Einzelplatz-Installationen, bei denen der Benutzer sich nicht selbst um Node.js kuemmern soll. Beachten Sie, dass das MSI rund 30 MB zum Installer hinzufuegt.
Variante C: Node.js als Portable-Version mitliefern
Statt einer systemweiten Installation kopieren Sie eine portable Node.js-Version direkt in den WvdS-Shell-Ordner. WvdS Shell sucht node.exe zuerst im eigenen Verzeichnis.
Schritt 1: Laden Sie die Portable-Version (ZIP) herunter und entpacken Sie sie:
# Node.js 22 LTS Portable (x64) herunterladen und entpacken Invoke-WebRequest -Uri "https://nodejs.org/dist/v22.14.0/node-v22.14.0-win-x64.zip" ` -OutFile "node-portable.zip" Expand-Archive "node-portable.zip" -DestinationPath "node-portable"
Schritt 2: Kopieren Sie nur die benoetigten Dateien (node.exe und die zugehoerigen DLLs) in Ihr Release-Verzeichnis unter einen node\-Unterordner.
Schritt 3: Fuegen Sie den Ordner in die [Files]-Sektion ein:
; ── Node.js Portable ──────────────────────────────────────────────────────── Source: "{#ReleaseDir}\node\*"; DestDir: "{app}\node"; Flags: ignoreversion recursesubdirs createallsubdirs
Schritt 4: Setzen Sie per [Registry] den Pfad, damit WvdS Shell die portable Version findet:
[Registry] Root: HKCU; Subkey: "Software\EMSR DATA\WvdS Shell"; \ ValueType: string; ValueName: "NodePath"; ValueData: "{app}\node\node.exe"; \ Flags: uninsdeletevalue
Wann sinnvoll: Fuer Unternehmens-Deployments, die eine kontrollierte Node.js-Version erfordern und keine systemweite Installation erlauben. Beachten Sie, dass die portable Version rund 80 MB zum Installer hinzufuegt.
Welche Variante waehlen?
| Kriterium | A: Nur warnen | B: MSI-Prerequisite | C: Portable |
|---|---|---|---|
| Installer-Groesse | +0 MB | +30 MB | +80 MB |
| Node.js-Updates | Benutzer/IT | Benutzer/IT | Neuer Installer noetig |
| Admin-Rechte fuer Node | Nicht noetig | Ja (MSI) | Nein |
| Offline-faehig | Nein | Ja | Ja |
| Kontrolle ueber Version | Keine | Teilweise | Vollstaendig |
Silent Install fuer Unternehmens-Deployment
Fuer automatisierte Rollouts unterstuetzt der Installer die Inno-Setup-Standardschalter:
# Stille Installation (Fortschrittsbalken sichtbar, keine Benutzereingaben) WvdSShell-Setup-1.0.0.exe /SILENT /NORESTART # Vollstaendig lautlos (kein Fenster, Logdatei schreiben) WvdSShell-Setup-1.0.0.exe /VERYSILENT /NORESTART /LOG="C:\Temp\wvds-install.log" # Benutzerdefinierter Installationspfad WvdSShell-Setup-1.0.0.exe /VERYSILENT /DIR="C:\Programme\WvdS Shell"
Uebersicht: Was steckt im Installer?
| Komponente | Im Installer | Lizenz | Zweck |
|---|---|---|---|
| WvdSShell.exe | Ja | Proprietaer | Hauptanwendung |
| WvdSShellHelper.exe | Ja | Proprietaer | CEF-Subprocess (zwingend) |
| libcef.dll + CEF-DLLs | Ja | BSD/MIT | Chromium WebView-Engine |
| libcrypto-3-x64.dll | Ja | Apache 2.0 | OpenSSL 3 (Post-Quantum) |
| DirectX / Vulkan DLLs | Ja | Microsoft/MIT | GPU-Rendering |
| builtins/ | Ja | Proprietaer | Eingebaute Extensions |
| Node.js | Nein | MIT | Separat installieren (optional) |
Das fertige Setup umfasst rund 120-160 MB. Den Grossteil machen die CEF-Chromium-Binaries aus.