PrintToVeraeTimeStamp/platform/windows/wix/Product-Full.wxs
George Lambert 86809b27eb
Some checks failed
windows-msi / full-msi-unsigned (push) Has been cancelled
feat: enable-printer-cas.ps1 unlocks deferred printer CAs for VM C
Toggles Product-Full markers; dual-ship-smoke reports C blocked until enabled.
2026-10-14 00:47:09 -04:00

343 lines
15 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
Product-Full.wxs — elevated full Print Stamp MSI (WiX v3).
Status: candle/light-ready authoring. File Sources match StageFull layout
produced by platform/windows/scripts/build-full-msi.ps1.
NOT commercial-ready: no Authenticode, printer CAs default OFF
(DEFERRED_PRINTER_CAS:OFF; enable-printer-cas.ps1), dual-ship NSIS
(see DUAL-SHIP.md).
Scope (wired File components; CAs default disabled):
- perMachine / elevated → ProgramFiles64\Verae\PrintStamp
- bin\verae-print.exe + bin\verae-printhelper.exe (required for light)
- scripts\ (common, user-token, install/uninstall-printer, verae-diag)
- LICENSE.txt + README-WINDOWS.txt
- Start Menu shortcuts (non-advertised + HKLM keypath)
- Public silent props (SILENT_PROPS.md)
- Printer CA + InstallExecuteSequence behind DEFERRED_PRINTER_CAS:OFF
Not this package:
- Tray presence → VeraeTrayShortcuts.wxs (per-user, non-elevated)
- UpgradeCode MUST stay distinct from tray A7C3E91B-…
Build (preferred):
powershell -NoProfile -ExecutionPolicy Bypass -File platform\windows\scripts\build-full-msi.ps1
Manual (Windows host with WiX v3 candle/light on PATH):
set WIXDIR=platform\windows\wix
set STAGE=%WIXDIR%\StageFull
set OUT=%WIXDIR%\out
set VER=0.3.6
REM Prefer Get-VeraePackageVersion / HelperVersion via build-full-msi.ps1
candle.exe -nologo -out %OUT%\ ^
-dProductVersion=%VER% ^
-dStageDir=%CD%\%STAGE% ^
%WIXDIR%\Product-Full.wxs
light.exe -nologo -out %OUT%\VeraePrintStamp-windows-amd64-%VER%.msi ^
%OUT%\Product-Full.wixobj
candle: syntax + schema.
light: requires every File Source under StageFull (see ComponentGroups below).
build-full-msi.ps1 exit 1 if WiX missing (clear error + install tip).
Do not claim commercial-ready until Authenticode + CA parity land
(docs/COMMERCIAL-INSTALLER-BACKLOG.md, CI-SIGN-NOTARY.md).
ProductVersion: -dProductVersion from build-full-msi.ps1
(Get-VeraePackageVersion → internal/job.HelperVersion). Fallback = 0.3.6.
-->
<?ifndef ProductVersion ?>
<?define ProductVersion = "0.3.6" ?>
<?endif?>
<?ifndef StageDir ?>
<?define StageDir = "StageFull" ?>
<?endif?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product
Id="*"
Name="Verae Print Stamp"
Language="1033"
Version="$(var.ProductVersion)"
Manufacturer="Verae"
UpgradeCode="F8B2A4C6-1E90-4D7B-A3C5-9D0E1F2A3B4C">
<!--
UpgradeCode is STABLE for the full elevated product only.
Do not reuse tray UpgradeCode A7C3E91B-4D2F-4B8A-9E61-0F3C8D2A5B17.
Product Id="*" → new ProductCode every build (MajorUpgrade handles replace).
-->
<Package
InstallerVersion="500"
Compressed="yes"
InstallScope="perMachine"
InstallPrivileges="elevated"
Platform="x64"
Manufacturer="Verae"
Description="Elevated Verae Print Stamp (Program Files). Dual-ship NSIS until CA + Authenticode validated."
Comments="Product-Full.wxs + build-full-msi.ps1. Hold ids are never evidence. See SILENT_PROPS.md for msiexec /qn." />
<MajorUpgrade
DowngradeErrorMessage="A newer version of Verae Print Stamp is already installed."
AllowSameVersionUpgrades="yes" />
<MediaTemplate EmbedCab="yes" />
<!-- ARP (Add/Remove Programs) -->
<Property Id="ARPURLINFOABOUT" Value="https://printit.verae.ai/" />
<Property Id="ARPHELPLINK" Value="https://customer.verae.ai/portal/" />
<Property Id="ARPCOMMENTS" Value="Verae Print Stamp — elevated MSI (unsigned). Primary setup remains NSIS until CA parity + Authenticode." />
<Property Id="ARPNOMODIFY" Value="1" />
<!--
Public silent properties — contract in SILENT_PROPS.md.
Never put API keys / JWT / passwords here (visible in repair + logs).
-->
<Property Id="VERAE_SKIP_KEY_SETUP" Value="0" />
<Property Id="VERAE_CHANNEL" Value="zapier" />
<Property Id="VERAE_INSTALL_API_URL" Value="https://customer.verae.ai" />
<Property Id="VERAE_ZAPIER_API_URL" Value="https://zap.verae.ai" />
<Property Id="VERAE_SKIP_PRINTERS" Value="0" />
<Property Id="VERAE_SKIP_HELPER_TASK" Value="0" />
<Property Id="VERAE_INSTALL_TRAY" Value="0" />
<Property Id="VERAE_IPP_ADDR" Value="127.0.0.1:8631" />
<Property Id="VERAE_OPEN_ON_COMPLETE" Value="folder" />
<Property Id="VERAE_PROMPT_FOR_FILENAME" Value="true" />
<Property Id="ALLUSERS" Value="1" />
<!-- Feature tree (minimal placeholders; expand per outline) -->
<Feature Id="ProductComplete" Title="Verae Print Stamp" Level="1"
Description="Full elevated product (binaries, scripts, docs, Start Menu).">
<Feature Id="CoreBinaries" Title="Core binaries" Level="1"
Description="verae-print.exe + verae-printhelper.exe under Program Files.">
<ComponentGroupRef Id="BinFiles" />
</Feature>
<Feature Id="Scripts" Title="PowerShell helpers" Level="1"
Description="install-printer, user-token, diag scripts.">
<ComponentGroupRef Id="ScriptFiles" />
</Feature>
<Feature Id="Docs" Title="License and readme" Level="1">
<ComponentGroupRef Id="DocFiles" />
</Feature>
<Feature Id="StartMenu" Title="Start Menu shortcuts" Level="1">
<ComponentGroupRef Id="StartMenuShortcuts" />
</Feature>
<!--
Feature PrintersAndHelper: Level=1 target — CustomActions only (no File).
CA body default OFF below; enable-printer-cas.ps1 when ready for VM C.
-->
<Feature Id="PrintersAndHelper" Title="Printers and print helper" Level="1"
Description="Deferred CA runs install-printer.ps1 (not File components). Stub only." />
<!--
Optional tray Feature Level=2 — prefer separate per-user MSI by default.
<Feature Id="TrayPresence" Title="Tray presence" Level="2" ... />
-->
</Feature>
<!--
Deferred printer CustomActions (NSIS parity). Default: DISABLED (whole body
commented) so candle/light need no live CA smoke. File components already
stage install-printer.ps1 / uninstall-printer.ps1.
Enable for VM C (uncomment body + keep schedule together):
powershell -NoProfile -ExecutionPolicy Bypass -File platform\windows\scripts\enable-printer-cas.ps1
Disable again:
...\enable-printer-cas.ps1 -Disable
Status only:
...\enable-printer-cas.ps1 -Status
Manual: unwrap DEFERRED_PRINTER_CAS:OFF markers only (do not drop defs or
InstallExecuteSequence). See wix/README.md § Enable printer CAs.
Schedule intent:
CA_StopHelper before InstallFiles (upgrade/repair)
CA_InstallPrinters after InstallFiles (NOT Installed AND skip<>1)
CA_InstallPrintersRollback paired rollback
CA_UninstallPrinters before RemoveFiles when REMOVE~="ALL"
-->
<!--DEFERRED_PRINTER_CAS:OFF
<CustomAction Id="CA_StopHelper"
Directory="System64Folder"
ExeCommand="cmd.exe /c schtasks /End /TN &quot;Verae Print Helper&quot; &amp; taskkill /F /IM verae-printhelper.exe /T"
Execute="deferred" Impersonate="no" Return="ignore" />
<CustomAction Id="CA_InstallPrinters"
Directory="INSTALLFOLDER"
ExeCommand="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File &quot;[INSTALLFOLDER]scripts\install-printer.ps1&quot; -InstallDir &quot;[INSTALLFOLDER]&quot;"
Execute="deferred" Impersonate="no" Return="check" />
<CustomAction Id="CA_InstallPrintersRollback"
Directory="INSTALLFOLDER"
ExeCommand="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File &quot;[INSTALLFOLDER]scripts\uninstall-printer.ps1&quot;"
Execute="rollback" Impersonate="no" Return="ignore" />
<CustomAction Id="CA_UninstallPrinters"
Directory="INSTALLFOLDER"
ExeCommand="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File &quot;[INSTALLFOLDER]scripts\uninstall-printer.ps1&quot;"
Execute="deferred" Impersonate="no" Return="ignore" />
<InstallExecuteSequence>
<Custom Action="CA_StopHelper" Before="InstallFiles">
Installed OR UPGRADINGPRODUCTCODE
</Custom>
<Custom Action="CA_InstallPrinters" After="InstallFiles">
NOT Installed AND VERAE_SKIP_PRINTERS&lt;&gt;"1"
</Custom>
<Custom Action="CA_InstallPrintersRollback" After="CA_InstallPrinters">
NOT Installed AND VERAE_SKIP_PRINTERS&lt;&gt;"1"
</Custom>
<Custom Action="CA_UninstallPrinters" Before="RemoveFiles">
REMOVE~="ALL"
</Custom>
</InstallExecuteSequence>
DEFERRED_PRINTER_CAS:OFF-->
</Product>
<!-- Directory tree: ProgramFiles64\Verae\PrintStamp\{bin,scripts} + Start Menu -->
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="VeraePf" Name="Verae">
<Directory Id="INSTALLFOLDER" Name="PrintStamp">
<Directory Id="BinDir" Name="bin" />
<Directory Id="ScriptsDir" Name="scripts" />
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="VeraeStartMenuDir" Name="Verae" />
</Directory>
</Directory>
</Fragment>
<!--
ComponentGroup BinFiles — StageFull\bin\ (build-full-msi.ps1)
light fails if Source paths missing. Required layout:
$(var.StageDir)\bin\verae-print.exe ← required (KeyPath)
$(var.StageDir)\bin\verae-printhelper.exe ← required (GUI subsystem)
-->
<Fragment>
<ComponentGroup Id="BinFiles" Directory="BinDir">
<Component Id="CmpVeraePrintExe" Guid="A11E0001-F001-4B01-9C01-000000000001" Win64="yes">
<File Id="FileVeraePrintExe" Name="verae-print.exe"
Source="$(var.StageDir)\bin\verae-print.exe"
KeyPath="yes" Checksum="yes" />
</Component>
<Component Id="CmpVeraePrintHelperExe" Guid="A11E0002-F002-4B02-9C02-000000000002" Win64="yes">
<File Id="FileVeraePrintHelperExe" Name="verae-printhelper.exe"
Source="$(var.StageDir)\bin\verae-printhelper.exe"
KeyPath="yes" Checksum="yes" />
</Component>
<!-- Machine InstallDir marker (no secrets) -->
<Component Id="CmpInstallDirReg" Guid="A11E0003-F003-4B03-9C03-000000000003" Win64="yes">
<RegistryValue
Root="HKLM"
Key="Software\Verae\PrintStamp"
Name="InstallDir"
Type="string"
Value="[INSTALLFOLDER]"
KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
<!--
ComponentGroup ScriptFiles — StageFull\scripts\
Staged from platform/windows/scripts by build-full-msi.ps1.
-->
<Fragment>
<ComponentGroup Id="ScriptFiles" Directory="ScriptsDir">
<Component Id="CmpCommonPs1" Guid="A11E0011-F011-4B11-9C11-000000000011" Win64="yes">
<File Id="FileCommonPs1Full" Name="common.ps1"
Source="$(var.StageDir)\scripts\common.ps1" KeyPath="yes" />
</Component>
<Component Id="CmpUserTokenPs1" Guid="A11E0012-F012-4B12-9C12-000000000012" Win64="yes">
<File Id="FileUserTokenPs1" Name="user-token.ps1"
Source="$(var.StageDir)\scripts\user-token.ps1" KeyPath="yes" />
</Component>
<Component Id="CmpInstallPrinterPs1" Guid="A11E0013-F013-4B13-9C13-000000000013" Win64="yes">
<File Id="FileInstallPrinterPs1" Name="install-printer.ps1"
Source="$(var.StageDir)\scripts\install-printer.ps1" KeyPath="yes" />
</Component>
<Component Id="CmpUninstallPrinterPs1" Guid="A11E0014-F014-4B14-9C14-000000000014" Win64="yes">
<File Id="FileUninstallPrinterPs1" Name="uninstall-printer.ps1"
Source="$(var.StageDir)\scripts\uninstall-printer.ps1" KeyPath="yes" />
</Component>
<Component Id="CmpVeraeDiagPs1" Guid="A11E0015-F015-4B15-9C15-000000000015" Win64="yes">
<File Id="FileVeraeDiagPs1" Name="verae-diag.ps1"
Source="$(var.StageDir)\scripts\verae-diag.ps1" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
<!--
ComponentGroup DocFiles — StageFull root
LICENSE.txt + README-WINDOWS.txt from platform/windows/ (if present, required for light).
-->
<Fragment>
<ComponentGroup Id="DocFiles" Directory="INSTALLFOLDER">
<Component Id="CmpLicenseTxt" Guid="A11E0021-F021-4B21-9C21-000000000021" Win64="yes">
<File Id="FileLicenseTxt" Name="LICENSE.txt"
Source="$(var.StageDir)\LICENSE.txt" KeyPath="yes" />
</Component>
<Component Id="CmpReadmeWindows" Guid="A11E0022-F022-4B22-9C22-000000000022" Win64="yes">
<File Id="FileReadmeWindows" Name="README-WINDOWS.txt"
Source="$(var.StageDir)\README-WINDOWS.txt" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
<!--
Start Menu shortcuts — non-advertised + HKLM keypath (elevated package).
Targets assume bin\ helpers after InstallFiles. No advertised Feature linkage yet.
-->
<Fragment>
<ComponentGroup Id="StartMenuShortcuts" Directory="VeraeStartMenuDir">
<Component Id="CmpSmKeyDialog" Guid="A11E0031-F031-4B31-9C31-000000000031" Win64="yes">
<Shortcut
Id="ScKeyDialog"
Name="Verae - Setup signing key"
Description="Open Verae signing-key dialog (verae-printhelper key-dialog)."
Target="[BinDir]verae-printhelper.exe"
Arguments="key-dialog"
WorkingDirectory="BinDir" />
<RegistryValue
Root="HKLM"
Key="Software\Verae\PrintStamp\Shortcuts"
Name="KeyDialog"
Type="integer"
Value="1"
KeyPath="yes" />
<RemoveFolder Id="RemoveVeraeSmFull" Directory="VeraeStartMenuDir" On="uninstall" />
</Component>
<Component Id="CmpSmStartHelper" Guid="A11E0032-F032-4B32-9C32-000000000032" Win64="yes">
<Shortcut
Id="ScStartHelper"
Name="Verae - Start print helper"
Description="Start verae-printhelper (IPP listen)."
Target="[BinDir]verae-printhelper.exe"
WorkingDirectory="BinDir" />
<RegistryValue
Root="HKLM"
Key="Software\Verae\PrintStamp\Shortcuts"
Name="StartHelper"
Type="integer"
Value="1"
KeyPath="yes" />
</Component>
<Component Id="CmpSmDiag" Guid="A11E0033-F033-4B33-9C33-000000000033" Win64="yes">
<Shortcut
Id="ScDiag"
Name="Verae - Collect diagnostics"
Description="Run verae-diag.ps1"
Target="[System64Folder]WindowsPowerShell\v1.0\powershell.exe"
Arguments="-NoProfile -ExecutionPolicy Bypass -File &quot;[ScriptsDir]verae-diag.ps1&quot;"
WorkingDirectory="ScriptsDir" />
<RegistryValue
Root="HKLM"
Key="Software\Verae\PrintStamp\Shortcuts"
Name="Diag"
Type="integer"
Value="1"
KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>