Baseline: WPF/Avalonia/Cli/Core + plans (BROWSER_FEATURES_PLAN v2, MOBILE_PLAN v1)
This commit is contained in:
commit
21b7c4d8bd
60 changed files with 6581 additions and 0 deletions
60
build/installer.iss
Normal file
60
build/installer.iss
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
; VideoDownloader Windows 설치자 (Inno Setup)
|
||||
; publish.ps1 이 /DARCH=x64 또는 /DARCH=arm64 로 2회 컴파일 → out/VideoDownloader-Setup-<arch>.exe
|
||||
|
||||
#define APP_NAME "VideoDownloader"
|
||||
#define APP_PUBLISHER "VideoDownloader"
|
||||
#define APP_EXE "VideoDownloader.exe"
|
||||
#ifndef APP_VERSION
|
||||
#define APP_VERSION "1.0.0"
|
||||
#endif
|
||||
#ifndef ARCH
|
||||
#error ARCH must be defined (x64 or arm64) via /DARCH=
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
AppName={#APP_NAME}
|
||||
AppVersion={#APP_VERSION}
|
||||
AppPublisher={#APP_PUBLISHER}
|
||||
UninstallDisplayIcon={app}\{#APP_EXE}
|
||||
DefaultDirName={autopf}\{#APP_NAME}
|
||||
DefaultGroupName={#APP_NAME}
|
||||
DisableProgramGroupPage=yes
|
||||
; per-user 설치 → {autopf} = %LocalAppData%\Programs, UAC 없음
|
||||
PrivilegesRequired=lowest
|
||||
PrivilegesRequiredOverridesAllowed=dialog
|
||||
OutputDir=..\out
|
||||
WizardStyle=modern
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
ArchitecturesInstallIn64BitMode=x64compatible
|
||||
|
||||
#if ARCH == "arm64"
|
||||
; arm64 전용(네이티브). x64 머신에선 거부.
|
||||
ArchitecturesAllowed=arm64
|
||||
AppId={{2E0ADFC1-2072-4457-8C50-ECFCEDECAD73}
|
||||
OutputBaseFilename=VideoDownloader-Setup-arm64
|
||||
#else
|
||||
; x64 + arm64(x64 에뮬레이션 폴백) 어디서든 설치 가능한 범용 설치자.
|
||||
ArchitecturesAllowed=x64compatible
|
||||
AppId={{65393C7D-17DC-4B9F-9D0B-F9911092C449}
|
||||
OutputBaseFilename=VideoDownloader-Setup-x64
|
||||
#endif
|
||||
|
||||
[Languages]
|
||||
Name: "korean"; MessagesFile: "compiler:Languages\Korean.isl"
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
|
||||
[Files]
|
||||
; self-contained publish 결과 전체를 앱 디렉터리로 복사
|
||||
Source: "{#PUBLISH_DIR}\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{#APP_NAME}"; Filename: "{app}\{#APP_EXE}"
|
||||
Name: "{group}\{#APP_NAME} 제거"; Filename: "{uninstallexe}"
|
||||
Name: "{commondesktop}\{#APP_NAME}"; Filename: "{app}\{#APP_EXE}"; Tasks: desktopicon
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\{#APP_EXE}"; Description: "{cm:LaunchProgram,{#APP_NAME}}"; Flags: nowait postinstall skipifsilent
|
||||
52
build/publish.ps1
Normal file
52
build/publish.ps1
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# VideoDownloader 다중 아키텍처 설치자 빌드
|
||||
# 사용: ./build/publish.ps1 [-Config Release] [-Version 1.0.0]
|
||||
# 결과: out/VideoDownloader-Setup-x64.exe, out/VideoDownloader-Setup-arm64.exe
|
||||
param(
|
||||
[string]$Config = "Release",
|
||||
[string]$Version = "1.0.0",
|
||||
[string[]]$Archs = @("x64", "arm64")
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$root = Split-Path -Parent $PSScriptRoot # 레포 루트
|
||||
$app = Join-Path $root "VideoDownloader.App\VideoDownloader.App.csproj"
|
||||
$iss = Join-Path $PSScriptRoot "installer.iss"
|
||||
$outDir = Join-Path $root "out"
|
||||
|
||||
# --- ISCC(=Inno Setup 컴파일러) 위치 해결 ---
|
||||
$iscc = $null
|
||||
foreach ($cand in @(
|
||||
"${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe",
|
||||
"$env:ProgramFiles\Inno Setup 6\ISCC.exe",
|
||||
"$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe",
|
||||
"$env:LOCALAPPDATA\Programs\Inno Setup 6.7\ISCC.exe"
|
||||
)) {
|
||||
if ($cand -and (Test-Path $cand)) { $iscc = $cand; break }
|
||||
}
|
||||
if (-not $iscc) { $iscc = (Get-Command ISCC.exe -ErrorAction SilentlyContinue).Source }
|
||||
if (-not $iscc) {
|
||||
throw "Inno Setup(ISCC) 를 찾을 수 없습니다. 설치: winget install --id JRSoftware.InnoSetup -e"
|
||||
}
|
||||
Write-Host "ISCC: $iscc" -ForegroundColor DarkGray
|
||||
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
|
||||
|
||||
foreach ($arch in $Archs) {
|
||||
$rid = "win-$arch"
|
||||
$pub = Join-Path $root "publish\$arch"
|
||||
Write-Host ""
|
||||
Write-Host "==== [$arch] publish ($rid, self-contained) ====" -ForegroundColor Cyan
|
||||
if (Test-Path $pub) { Remove-Item $pub -Recurse -Force }
|
||||
# WPF 멀티플랫폼: Platform 축을 RID 와 일치시켜 빌드.
|
||||
dotnet publish $app -c $Config -r $rid -p:Platform=$arch --self-contained -o $pub
|
||||
if ($LASTEXITCODE -ne 0) { throw "publish 실패: $rid (exit $LASTEXITCODE). arm64 는 yt-dlp/WebView2 런타임 관련 처음 빌드 시 이슈가 있을 수 있습니다." }
|
||||
|
||||
Write-Host "==== [$arch] Inno Setup 컴파일 ====" -ForegroundColor Cyan
|
||||
& $iscc /Q "/DAPP_VERSION=$Version" "/DARCH=$arch" "/DPUBLISH_DIR=$pub" $iss
|
||||
if ($LASTEXITCODE -ne 0) { throw "ISCC 실패: $arch (exit $LASTEXITCODE)" }
|
||||
Write-Host "완료: out\VideoDownloader-Setup-$arch.exe" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "설치자 생성 완료:" -ForegroundColor Green
|
||||
Get-ChildItem (Join-Path $outDir "VideoDownloader-Setup-*.exe") |
|
||||
ForEach-Object { Write-Host (" {0,-38} {1:N1} MB" -f $_.Name, ($_.Length / 1MB)) }
|
||||
Loading…
Add table
Add a link
Reference in a new issue