# Dragon-ISO Installer Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Rebrand the WiX v5 MSI installer from TeamsISO to Dragon-ISO, producing `Dragon-ISO-Setup-1.0.0.0.msi` for end-user download. **Architecture:** Rename the `.wixproj` file, rewrite `Package.wxs` with Dragon-ISO branding and a simple `WixUI_Minimal` UI (no directory picker), and fix a bug in `release.yml` where the signing step references the wrong executable filename. **Tech Stack:** WiX Toolset v5, MSBuild, PowerShell; no unit tests (installer files are build-verified by `dotnet build`) --- ## File Map | File | Action | Responsibility | |---|---|---| | `installer/TeamsISO.Installer.wixproj` | Rename + rewrite | MSBuild project — output name, publish dir, asset dir | | `installer/Dragon-ISO.Installer.wixproj` | Created by rename | Same as above, Dragon-ISO branded | | `installer/Package.wxs` | Rewrite | WiX source — all installer logic, shortcuts, metadata | | `.forgejo/workflows/release.yml` | Fix line 119 | Fix `Dragon-ISO.exe` → `DragonISO.exe` (exe filename matches AssemblyName) | > **Important:** `Dragon-ISO.App.csproj` has `DragonISO` (no hyphen). The published executable is therefore `DragonISO.exe`, not `Dragon-ISO.exe`. All shortcut targets and signing steps must use `DragonISO.exe`. --- ## Task 1: Rename the .wixproj file **Files:** - Rename: `installer/TeamsISO.Installer.wixproj` → `installer/Dragon-ISO.Installer.wixproj` - [ ] **Step 1: Rename the file using git mv** ```powershell cd C:\Users\zacga\source\repos\Dragon-ISO git mv installer/TeamsISO.Installer.wixproj installer/Dragon-ISO.Installer.wixproj ``` - [ ] **Step 2: Verify the rename** ```powershell Get-ChildItem installer/ ``` Expected: `Dragon-ISO.Installer.wixproj` and `Package.wxs` (no `TeamsISO.Installer.wixproj`) --- ## Task 2: Rewrite Dragon-ISO.Installer.wixproj **Files:** - Modify: `installer/Dragon-ISO.Installer.wixproj` - [ ] **Step 1: Replace the file content entirely** Write the following to `installer/Dragon-ISO.Installer.wixproj`: ```xml Package Dragon-ISO-Setup-$(Version) x64 x64 $(MSBuildThisFileDirectory)..\publish\Dragon-ISO\ PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\Dragon-ISO.App\Assets\ false ``` - [ ] **Step 2: Verify the file reads back correctly** ```powershell Get-Content installer/Dragon-ISO.Installer.wixproj | Select-String "OutputName|PublishDir|AssetsDir" ``` Expected output (3 lines): ``` Dragon-ISO-Setup-$(Version) $(MSBuildThisFileDirectory)..\publish\Dragon-ISO\ PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\Dragon-ISO.App\Assets\ ``` --- ## Task 3: Rewrite Package.wxs with Dragon-ISO branding **Files:** - Modify: `installer/Package.wxs` Changes from the original TeamsISO version: - Package Name: "TeamsISO" → "Dragon-ISO" - SummaryInformation description and keywords updated - MajorUpgrade error message updated - Feature Title: "TeamsISO" → "Dragon-ISO" - UI switched from `WixUI_InstallDir` (shows dir picker) → `WixUI_Minimal` (Welcome → Install → Finish) - `WIXUI_INSTALLDIR` property removed (not used by WixUI_Minimal) - ARPHELPLINK URL: teamsiso → dragon-iso - ARPCOMMENTS: "TeamsISO" → "Dragon-ISO" - Icon Id: "TeamsISOIcon" → "DragonISOIcon" - Icon SourceFile: `teamsiso.ico` → `Dragon-ISO.ico` - ARPPRODUCTICON value: "TeamsISOIcon" → "DragonISOIcon" - Added .NET 8 Desktop Runtime detection property - Install directory Name: "TeamsISO" → "Dragon-ISO" - Start Menu shortcut Id/Name/Target/Icon updated - Desktop shortcut Id/Name/Target/Icon updated - All registry keys: `Software\Wild Dragon\TeamsISO` → `Software\Wild Dragon\Dragon-ISO` - Shortcut targets: `TeamsISO.exe` → `DragonISO.exe` (matches AssemblyName, no hyphen) - [ ] **Step 1: Replace Package.wxs entirely with Dragon-ISO branded content** Write the following to `installer/Package.wxs`: ```xml ``` - [ ] **Step 2: Verify no "TeamsISO" strings remain in Package.wxs** ```powershell Select-String -Path installer/Package.wxs -Pattern "TeamsISO" ``` Expected: no output (zero matches) --- ## Task 4: Fix release.yml — wrong exe filename in signing step **Files:** - Modify: `.forgejo/workflows/release.yml` line 119 The signing step references `publish/Dragon-ISO/Dragon-ISO.exe` but the app's `AssemblyName` is `DragonISO`, so the published exe is `DragonISO.exe`. Fix it. - [ ] **Step 1: Edit release.yml to fix the exe path** In `.forgejo/workflows/release.yml`, find and replace: Old (line 119): ``` 'publish/Dragon-ISO/Dragon-ISO.exe' ``` New: ``` 'publish/Dragon-ISO/DragonISO.exe' ``` - [ ] **Step 2: Verify the fix** ```powershell Select-String -Path .forgejo/workflows/release.yml -Pattern "Dragon-ISO\.exe|DragonISO\.exe" ``` Expected output: ``` .forgejo/workflows/release.yml:119: 'publish/Dragon-ISO/DragonISO.exe' ``` (One match, using `DragonISO.exe` with no hyphen) --- ## Task 5: Check WiX workload and verify build **Files:** None (verification only) - [ ] **Step 1: Check if WiX workload is installed** ```powershell dotnet workload list ``` Expected: output includes `wix` in the list. If not installed, run: ```powershell dotnet workload install wix ``` - [ ] **Step 2: Publish the app to the expected location** ```powershell cd C:\Users\zacga\source\repos\Dragon-ISO dotnet publish src/Dragon-ISO.App/Dragon-ISO.App.csproj ` -c Release -r win-x64 --self-contained false ` -o publish/Dragon-ISO ``` Expected: ends with `Build succeeded.` and creates `publish/Dragon-ISO/DragonISO.exe` - [ ] **Step 3: Verify the exe filename in the publish output** ```powershell Get-ChildItem publish/Dragon-ISO/ -Filter "*.exe" ``` Expected: one file named `DragonISO.exe` (confirms shortcut targets are correct) - [ ] **Step 4: Build the MSI** ```powershell dotnet build installer/Dragon-ISO.Installer.wixproj -c Release /p:Version=1.0.0.0 ``` Expected: ends with `Build succeeded.` — no errors, no warnings. - [ ] **Step 5: Verify the MSI was produced with the correct name** ```powershell Get-ChildItem installer/bin -Recurse -Filter "*.msi" ``` Expected: one file named `Dragon-ISO-Setup-1.0.0.0.msi` --- ## Task 6: Commit all changes - [ ] **Step 1: Stage the changed files** ```powershell cd C:\Users\zacga\source\repos\Dragon-ISO git add installer/Dragon-ISO.Installer.wixproj git add installer/Package.wxs git add .forgejo/workflows/release.yml ``` - [ ] **Step 2: Verify nothing unexpected is staged** ```powershell git status ``` Expected staged files: - `installer/Dragon-ISO.Installer.wixproj` (renamed from TeamsISO.Installer.wixproj) - `installer/Package.wxs` (modified) - `.forgejo/workflows/release.yml` (modified) No other files should be staged. - [ ] **Step 3: Commit** ```powershell git commit -m "$(cat <<'EOF' rebrand installer from TeamsISO to Dragon-ISO - Rename TeamsISO.Installer.wixproj → Dragon-ISO.Installer.wixproj - Update Package.wxs: product name, shortcuts, registry keys, ARP metadata, install directory, and icon all updated to Dragon-ISO - Switch UI from WixUI_InstallDir to WixUI_Minimal (no dir picker) - Add .NET 8 Desktop Runtime detection property - Fix release.yml: signing step referenced Dragon-ISO.exe but AssemblyName=DragonISO so exe is DragonISO.exe (no hyphen) Co-Authored-By: Claude Sonnet 4.5 EOF )" ``` --- ## Testing Checklist (manual verification after install) Once the MSI is built, install it on a test machine and verify: - [ ] `Dragon-ISO-Setup-1.0.0.0.msi` installs without errors - [ ] App installs to `C:\Program Files\Wild Dragon\Dragon-ISO\` - [ ] `DragonISO.exe` is present in the install folder - [ ] Start Menu shows `Wild Dragon → Dragon-ISO` shortcut with correct icon - [ ] Desktop shows `Dragon-ISO` shortcut with correct icon - [ ] Both shortcuts launch the app successfully - [ ] Add/Remove Programs shows: - Name: Dragon-ISO - Publisher: Wild Dragon LLC - Version: 1.0.0.0 - Help link: `https://forge.wilddragon.net/zgaetano/dragon-iso` - [ ] Uninstall removes all files, shortcuts, and registry entries - [ ] `%APPDATA%\Dragon-ISO\` (user config) is NOT removed on uninstall