Track B — ClickOnce

/PUBLISH=<project.bsetup> lays out a ClickOnce publish folder: application files renamed to *.deploy, an application manifest and a deployment manifest, optional signing via mage/signtool, and a deploymentProvider (update URL) for auto-update.

Beep.Installer.exe /PUBLISH=MyApp.bsetup /OUT=publish /UPDATEURL=https://host/app

Key writers: ApplicationManifestWriter, DeploymentManifestWriter, PublishStager, plus the runtime UpdateChecker/UpgradeEngine for the on-launch update flow. (For new apps, the modern Updates domain supersedes ClickOnce updating.)

Track C — MSIX

/BUILD=<project> /FORMAT=msix stages a flat payload, generates AppxManifest.xml (identity, capabilities, applications, visual assets), synthesizes tiles/icons from the setup icon, and packages via MakeAppx. A StoreReadinessChecker flags Store-association issues. Where MakeAppx rejects a minimal manifest, the build reports the precise error and points at the staging folder rather than pretending success.

Code signing

Signing/SignTool locates signtool.exe on PATH or in the Windows Kits, and signs with SHA-256 + an RFC 3161 timestamp. An unsigned build emits a prominent SmartScreen warning; /REQUIRESIGNED turns that into a hard CI failure.