# Build: AZA_EmpfangShell.exe (PyInstaller) + Inno Setup Installer nur fuer Praxis-Chat-Huelle. # Ausgabe: dist\installer\aza_empfang_chat_setup.exe # Unabhaengig von build_exe.ps1 / aza_desktop_setup.exe $ErrorActionPreference = "Stop" $projectRoot = $PSScriptRoot Set-Location $projectRoot $specRel = "AZA_EmpfangShell.spec" $specFile = Join-Path $projectRoot $specRel $innoScript = Join-Path $projectRoot "installer\aza_empfang_shell_installer.iss" $setupOutput = Join-Path $projectRoot "dist\installer\aza_empfang_chat_setup.exe" $shellExe = Join-Path $projectRoot "dist\AZA_EmpfangShell.exe" $azaVersionPy = Join-Path $projectRoot "aza_version.py" $logoIco = Join-Path $projectRoot "logo.ico" function Find-InnoSetup { $candidates = @( "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe", "${env:ProgramFiles}\Inno Setup 6\ISCC.exe", "C:\Program Files (x86)\Inno Setup 6\ISCC.exe", "C:\Program Files\Inno Setup 6\ISCC.exe", "${env:LOCALAPPDATA}\Programs\Inno Setup 6\ISCC.exe" ) foreach ($path in $candidates) { if ($path -and (Test-Path $path)) { return $path } } $isccInPath = Get-Command "ISCC.exe" -ErrorAction SilentlyContinue if ($isccInPath) { return $isccInPath.Source } return $null } Write-Host "=== AzA Empfang Chat - Shell-EXE + Installer ===" -ForegroundColor Cyan Write-Host "" if (-not (Test-Path $specFile)) { Write-Error "SPEC nicht gefunden: $specFile" exit 1 } if (-not (Test-Path (Join-Path $projectRoot "aza_empfang_webview.py"))) { Write-Error "aza_empfang_webview.py fehlt." exit 1 } if (-not (Test-Path $innoScript)) { Write-Error "Inno-Script fehlt: $innoScript" exit 1 } if (-not (Test-Path $logoIco)) { Write-Error "logo.ico fehlt: $logoIco" exit 1 } Write-Host "[1/3] pip: pywebview, pyinstaller..." python -m pip install --disable-pip-version-check -q pywebview pyinstaller if ($LASTEXITCODE -ne 0) { Write-Error "pip install fehlgeschlagen." exit 1 } Write-Host "[2/3] Build-Stamp (_build_info.py)..." $stampScript = Join-Path $projectRoot "aza_build_stamp.py" if (Test-Path $stampScript) { python $stampScript if ($LASTEXITCODE -ne 0) { Write-Warning "Build-Stamp fehlgeschlagen - fortfahren." } } Write-Host "[2/3] PyInstaller: $specRel ..." pyinstaller --noconfirm $specFile if ($LASTEXITCODE -ne 0) { Write-Error "PyInstaller fehlgeschlagen." exit 1 } if (-not (Test-Path $shellExe)) { Write-Error "EXE nicht gefunden: $shellExe" exit 1 } Write-Host " OK: $shellExe" # Version fuer Inno $appVersion = "0.0.0" if (Test-Path $azaVersionPy) { $versionContent = Get-Content $azaVersionPy -Raw if ($versionContent -match 'APP_VERSION\s*=\s*"([^"]+)"') { $appVersion = $matches[1].Trim() } } $innoCompiler = Find-InnoSetup if (-not $innoCompiler) { Write-Error "Inno Setup 6 (ISCC.exe) nicht gefunden. Bitte installieren: https://jrsoftware.org/isdl.php" exit 1 } Write-Host " ISCC: $innoCompiler" $outDir = Split-Path $setupOutput -Parent if (-not (Test-Path $outDir)) { New-Item -ItemType Directory -Path $outDir | Out-Null } Write-Host "[3/3] Inno Setup (Version $appVersion)..." & $innoCompiler "/DMyAppVersion=$appVersion" $innoScript if ($LASTEXITCODE -ne 0) { Write-Error "Inno Build fehlgeschlagen." exit 1 } if (-not (Test-Path $setupOutput)) { Write-Error "Setup nicht gefunden: $setupOutput" exit 1 } $item = Get-Item -LiteralPath $setupOutput $hash = (Get-FileHash -LiteralPath $setupOutput -Algorithm SHA256).Hash Write-Host "" Write-Host "=== Fertig ===" -ForegroundColor Green Write-Host "Installationsdatei:" Write-Host " Pfad: $($item.FullName)" Write-Host " LastWriteTime: $($item.LastWriteTime)" Write-Host " Groesse (Bytes): $($item.Length)" Write-Host " SHA256: $hash" Write-Host "" Write-Host "USB-Stick: Datei kopieren:" Write-Host " $($item.FullName)"