The Launcher's XP11 port (8730b9b) now extends to everything: one net40
flavor across Console, vPOD, Contract, and SecureConfig (Newtonsoft.Json
everywhere; the net48/System.Text.Json legs and their #if splits are gone
since nothing consumed them).
Console (net40, single TFM like the Launcher):
- The ~31 BinaryFormatter bitmap blobs in the .resx files became raw
embedded files under assets/icons/ (extracted byte-faithfully via a
serialization surrogate — the animated square_throbber.gif survives),
loaded by Properties.Resources.EmbeddedBitmap/EmbeddedIcon. Reason:
System.Resources.Extensions' DeserializingResourceReader is net461+
and cannot load on net40. Strings stay in the .resx.
- IReadOnlyList -> IList in AppRegistry (net45+ interface).
vPOD (net40, single TFM):
- Zip extraction now shares the Launcher's MiniZip.cs (linked source), so
the diff-test install round-trip exercises it against ZipArchive zips.
- RPC args as JTokens; LaunchApps.json persistence via Newtonsoft;
Thread.VolatileRead instead of Volatile.Read.
Contract/SecureConfig: net40-only; Client/** (PodManagerConnection) now
ships in the one build. The Launcher package gains
TeslaSecureConfiguration.dll as a dependency of the client half.
Tests: the net48 xunit host loads the net40 assemblies (both CLR4), so
the suite exercises exactly what ships — 106/106 green. Also verified
live: net40 console provisioned, managed, and ran a full RP mission
against net40 vPOD (beacon/passphrase/RSA, 53290 RPC, egg load,
Run/Stop Mission).
Version: 4.11.4.3 across Launcher, Console, and vPOD (vPOD joins the
suite version line; was 1.0.0). Ship the dotNetFx40 redistributable in
Launcher/assets for XP-era pods.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
41 lines
1.6 KiB
PowerShell
41 lines
1.6 KiB
PowerShell
# Builds the vPOD install package for the console's Manage Site -> Install Product.
|
|
#
|
|
# The launcher extracts the zip's entries directly into C:\Games\, so the archive
|
|
# root must contain a `vPOD\` folder holding vPOD.exe + its dependencies. The
|
|
# console's Apps.xml vPOD product then launches C:\Games\vPOD\vPOD.exe.
|
|
#
|
|
# Usage: pwsh -File pack.ps1 (Release, default)
|
|
# pwsh -File pack.ps1 -Config Debug
|
|
param([string]$Config = 'Release')
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
# net40 leg: the XP11 build that runs on XP SP3 pods through Windows 11.
|
|
$bin = Join-Path $root "bin\$Config\net40"
|
|
$distDir = Join-Path $root 'dist'
|
|
$stage = Join-Path $distDir 'vPOD' # -> C:\Games\vPOD on the pod
|
|
$zipPath = Join-Path $distDir 'vPOD.zip'
|
|
|
|
Write-Host "Building vPOD ($Config)..."
|
|
dotnet build (Join-Path $root 'vPOD.csproj') -c $Config --nologo -v minimal | Out-Null
|
|
|
|
if (-not (Test-Path (Join-Path $bin 'vPOD.exe'))) {
|
|
throw "Build output not found: $bin\vPOD.exe"
|
|
}
|
|
|
|
# Fresh stage dir.
|
|
if (Test-Path $stage) { Remove-Item $stage -Recurse -Force }
|
|
New-Item -ItemType Directory -Force $stage | Out-Null
|
|
|
|
# The runtime payload: the exe + the vendored Munga Net.dll (copied local by the
|
|
# csproj) + config. No pdb/xml.
|
|
Get-ChildItem $bin -File |
|
|
Where-Object { $_.Extension -in '.exe', '.dll', '.config' } |
|
|
ForEach-Object { Copy-Item $_.FullName $stage }
|
|
|
|
if (Test-Path $zipPath) { Remove-Item $zipPath -Force }
|
|
Compress-Archive -Path $stage -DestinationPath $zipPath -Force
|
|
|
|
Write-Host "Packaged: $zipPath"
|
|
Get-ChildItem $stage | Select-Object Name, Length | Format-Table -AutoSize
|