Files
xsl-validator/docs/windows_distribution.md
T
info 43bd0ec8e6 Füge WiX v6-kompatiblen MSI-Installer hinzu
- Erstelle generate_wix_files.py zum Ersetzen von 'wix heat'
- Migriere DocuMentor.wxs auf WiX v4/v6-Syntax
- Füge build_msi.py für automatisierten Build hinzu
- Aktualisiere Dokumentation für WiX v6
- Erweitere .gitignore für WiX-Artefakte

WiX v6 hat das 'heat' Tool entfernt, daher wurde ein Python-Skript
erstellt, das automatisch alle Dateien aus dist/DocuMentor harvested
und eine WiX-konforme ProductFiles.wxs generiert.

Der neue Build-Prozess:
1. uv run python build_windows.py
2. uv run python generate_wix_files.py
3. wix build DocuMentor.wxs ProductFiles.wxs -o DocuMentor.msi

Oder vereinfacht: uv run python build_msi.py
2026-01-18 19:01:05 +01:00

8.5 KiB

Windows Distribution Guide für DocuMentor

Überblick

Dieses Dokument beschreibt, wie DocuMentor für Windows-Benutzer ohne Python-Installation verpackt wird.

Voraussetzungen

Auf dem Entwicklungssystem

# Dependencies installieren (inkl. PyInstaller)
uv sync --all-groups

Für Setup.exe (optional)

Build-Prozess

Option 1: Einfacher Build (ZIP-Distribution)

# 1. PyInstaller installieren
uv sync --all-groups

# 2. Build ausführen
uv run python build_windows.py

Dies erstellt:

  • dist/DocuMentor/DocuMentor.exe - Eigenständige Executable
  • dist/DocuMentor-YYYYMMDD-Windows.zip - Portable ZIP-Archiv

Option 2: Professionelle Setup.exe mit Inno Setup

# 1. PyInstaller Build
uv run python build_windows.py

# 2. Inno Setup Compiler ausführen
iscc installer.iss

Dies erstellt:

  • dist/installer/DocuMentor-Setup-0.1.0.exe - Professioneller Installer

Option 3: MSI-Installer mit WiX

Voraussetzungen:

# WiX Toolset v6 installieren (aktuell)
dotnet tool install --global wix

Schritt 1: PyInstaller Build erstellen

uv run python build_windows.py

Schritt 2: ProductFiles.wxs generieren

WICHTIG: WiX v6 hat das heat Tool entfernt. Stattdessen verwenden wir ein Python-Skript:

# Generiert automatisch ProductFiles.wxs mit allen Dateien aus dist/DocuMentor
uv run python generate_wix_files.py

Schritt 3: MSI kompilieren

# WiX v6 Build
wix build DocuMentor.wxs ProductFiles.wxs -o DocuMentor.msi

Hinweis: Die Dateien DocuMentor.wxs und generate_wix_files.py sind bereits im Repository vorhanden und WiX v4/v6-kompatibel.

Schritt 4: MSI testen

# Installation (als Administrator)
msiexec /i DocuMentor.msi

# Silent Installation für Deployment
msiexec /i DocuMentor.msi /quiet /qn /norestart

# Deinstallation
msiexec /x DocuMentor.msi

MSI-Vorteile gegenüber Inno Setup:

  • Windows-Standard (.msi Format)
  • Gruppen-Richtlinien-Deployment (GPO)
  • Silent Installation für Enterprise
  • Windows Installer Service Transaktionen
  • Rollback bei Fehlern
  • Patch-Unterstützung (.msp)

Build-Automatisierung (build_msi.py):

"""WiX MSI Build-Skript für DocuMentor (WiX v6)"""
import subprocess
import sys
from pathlib import Path

def build_msi():
    project_root = Path(__file__).parent
    dist_dir = project_root / "dist" / "DocuMentor"
    
    if not dist_dir.exists():
        print("Fehler: PyInstaller Build nicht gefunden. Erst build_windows.py ausführen!")
        sys.exit(1)
    
    # Schritt 1: ProductFiles.wxs generieren (ersetzt heat)
    print("Generiere ProductFiles.wxs...")
    subprocess.run([
        "uv", "run", "python", "generate_wix_files.py"
    ], check=True)
    
    # Schritt 2: MSI kompilieren mit WiX v6
    print("Kompiliere MSI-Installer...")
    subprocess.run([
        "wix", "build",
        "DocuMentor.wxs",
        "ProductFiles.wxs",
        "-o", "DocuMentor.msi"
    ], check=True)
    
    print("\n[OK] MSI erstellt: DocuMentor.msi")

if __name__ == "__main__":
    build_msi()

Manuelle Schritte

1. PyInstaller direkt verwenden

# Cleanup
rm -rf build/ dist/

# Build
uv run pyinstaller --clean DocuMentor.spec

# Testen
dist/DocuMentor/DocuMentor.exe

2. Anpassungen vornehmen

Icon hinzufügen:

  1. Icon-Datei (.ico) im Projekt speichern, z.B. resources/icon.ico
  2. In DocuMentor.spec anpassen:
    icon='resources/icon.ico'
    

Versionsinformationen: In DocuMentor.spec erweitern:

exe = EXE(
    # ...
    version='version_info.txt',  # Windows-Versionsinformationen
)

PyInstaller .spec Konfiguration

Die Datei DocuMentor.spec enthält:

  • datas: UI-Dateien (.ui) werden mitgepackt
  • hiddenimports: Alle notwendigen PySide6/Polars-Module
  • console=False: GUI-Anwendung ohne Konsole
  • upx=True: Kompression der Binaries

Wichtige Einstellungen

# Ein-Datei-Build (alles in einer .exe)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,      # Diese Zeilen
    a.zipfiles,      # auskommentieren
    a.datas,         # für One-File
    # ...
    onefile=True,    # Hinzufügen
)

Achtung: One-File-Build ist langsamer beim Start, da alles temporär entpackt werden muss.

Distribution

ZIP-Archive

# Automatisch durch build_windows.py erstellt
dist/DocuMentor-YYYYMMDD-Windows.zip

Vorteile:

  • Einfach, portable
  • Keine Installation nötig
  • Kann auf USB-Stick verwendet werden

Nachteile:

  • Keine Deinstallationsroutine
  • Keine Verknüpfungen
  • Keine Registry-Einträge

Setup.exe mit Inno Setup

Vorteile:

  • Professionell
  • Deinstallation integriert
  • Start-Menü und Desktop-Icons
  • Update-Mechanismus möglich

Nachteile:

  • Benötigt Administrator-Rechte (optional)
  • Komplexere Konfiguration

MSI-Installer (WiX)

Vorteile:

  • Windows-Standard (.msi Format)
  • Gruppen-Richtlinien-Deployment (GPO) für Enterprise
  • Silent Installation möglich (msiexec /quiet)
  • Windows Installer Transaktionen und Rollback
  • Patch-Unterstützung (.msp für Updates)
  • Deinstallation über Systemsteuerung integriert
  • Versionsupgrades automatisch verwaltet

Nachteile:

  • Komplexere Erstellung als Inno Setup
  • Benötigt WiX Toolset (kostenlos)
  • XML-basierte Konfiguration
  • Lernkurve für WiX-Syntax

Externe Abhängigkeiten

DocuMentor benötigt diese Tools (NICHT im Installer enthalten):

  1. Java Runtime Environment (JRE) 11+

  2. Apache FOP

  3. Saxon XSLT Prozessor

  4. diff-pdf

Benutzer-Anleitung

Nach der Installation:

  1. DocuMentor starten
  2. Beim ersten Start öffnet sich automatisch die Einstellungen
  3. Pfade zu Java, Saxon, FOP und diff-pdf konfigurieren
  4. Projekt-Verzeichnis wählen oder neues Projekt erstellen

Testing

Lokales Testing (Linux/WSL)

# Build für Windows erstellen
uv run python build_windows.py

# Executable mit Wine testen (falls verfügbar)
wine dist/DocuMentor/DocuMentor.exe

Testing auf Windows

  1. ZIP auf Windows-System kopieren
  2. Entpacken
  3. DocuMentor.exe ausführen
  4. Alle Features testen:
    • Projekt öffnen/erstellen
    • Tree-Navigation
    • PDF-Generierung
    • Einstellungen

Troubleshooting

Problem: "Module not found" Fehler

Lösung: Hidden imports in DocuMentor.spec ergänzen:

hiddenimports=[
    # ... existing
    'missing_module',
]

Problem: UI-Dateien nicht gefunden

Lösung: Prüfen ob datas korrekt konfiguriert:

datas=[
    ('src/ui/*.ui', 'ui'),
]

Problem: Executable zu groß

Lösungen:

  1. UPX-Kompression aktivieren (bereits aktiv)
  2. Excludes hinzufügen für ungenutzte Module:
    excludes=['tkinter', 'matplotlib', 'test', 'unittest']
    
  3. One-File-Build verwenden (langsamer Start)

Problem: Antivirus blockiert

Lösung:

  • Code-Signing-Zertifikat verwenden
  • Bei Microsoft einreichen für SmartScreen
  • README mit Hinweis erweitern

Automatisierung mit CI/CD

GitHub Actions Beispiel

name: Build Windows Release

on:
  push:
    tags:
      - 'v*'

jobs:
  build:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3

      - name: Install uv
        uses: astral-sh/setup-uv@v1

      - name: Build
        run: uv run python build_windows.py

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          files: dist/*.zip

Versionierung

Version in folgenden Dateien aktualisieren:

  1. pyproject.toml - version = "X.Y.Z"
  2. installer.iss - #define MyAppVersion "X.Y.Z"
  3. Optional: src/version.py erstellen

Lizenz und Rechtliches

  • Alle Python-Dependencies sind in der Distribution enthalten
  • PySide6 (LGPL): Dynamische Verlinkung ist OK
  • Polars (MIT): Unproblematisch
  • Pydantic (MIT): Unproblematisch

Externe Tools (Saxon, FOP) haben eigene Lizenzen und müssen separat installiert werden.