diff --git a/scripts/build-installer.ps1 b/scripts/build-installer.ps1 index af8e060..67cc489 100644 --- a/scripts/build-installer.ps1 +++ b/scripts/build-installer.ps1 @@ -53,14 +53,46 @@ if ($LASTEXITCODE -ne 0) { throw 'service publish failed' } -c $Configuration -r win-x64 --self-contained false -o $publishGui | Out-Host if ($LASTEXITCODE -ne 0) { throw 'GUI publish failed' } -# 2. Compile installer. +# 2. Pre-flight: confirm every source path the .iss references exists, and +# surface the longest path so MAX_PATH issues are obvious in the log. +function Show-SourcePath($label, $path, [switch]$Recursive) { + if (-not (Test-Path $path)) { Write-Warning "MISSING $label : $path"; return } + $items = if ($Recursive) { + Get-ChildItem $path -Recurse -File -ErrorAction SilentlyContinue + } else { + Get-ChildItem $path -File -ErrorAction SilentlyContinue + } + $count = ($items | Measure-Object).Count + $longest = ($items | Measure-Object -Maximum -Property { $_.FullName.Length }).Maximum + Write-Host (" {0,-30} files={1,-5} longestPath={2,-5} root={3}" -f $label, $count, $longest, $path) +} + +Write-Host "" +Write-Host "--- pre-flight: source paths the .iss will read ---" -ForegroundColor Cyan +Show-SourcePath 'publish\service' $publishSvc -Recursive +Show-SourcePath 'publish\gui' $publishGui -Recursive +Show-SourcePath 'scripts' (Join-Path $repoRoot 'scripts') +Show-SourcePath 'scripts\examples' (Join-Path $repoRoot 'scripts\examples') -Recursive +Show-SourcePath 'docs' (Join-Path $repoRoot 'docs') -Recursive +Show-SourcePath 'resources' (Join-Path $repoRoot 'resources') +Show-SourcePath 'README.md (file)' (Join-Path $repoRoot 'README.md') + +$lpe = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' ` + -Name LongPathsEnabled -ErrorAction SilentlyContinue).LongPathsEnabled +Write-Host " LongPathsEnabled (HKLM): $lpe" +Write-Host "" + +# 3. Compile installer. $iscc = Find-InnoCompiler $iss = Join-Path $repoRoot 'installer\webhook-server.iss' $dist = Join-Path $repoRoot 'dist' New-Item -ItemType Directory -Path $dist -Force | Out-Null Write-Host "Compiling installer with $iscc" -& $iscc "/DAppVersion=$version" $iss +# /Qp gives quiet output but still prints the line each source file matches, +# which surfaces the exact source path that ISCC fails on (the default mode +# only logs "The system cannot find the path specified." with no detail). +& $iscc "/DAppVersion=$version" "/Qp" $iss if ($LASTEXITCODE -ne 0) { throw 'Inno Setup compile failed' } $out = Get-Item (Join-Path $dist "WebhookServer-Setup-$version.exe")