NSIS+MSI validation matrix; site version 0.3.6 string; no Authenticode claim.
333 lines
15 KiB
XML
333 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 commented, dual-ship NSIS
|
|
(see DUAL-SHIP.md).
|
|
|
|
Scope (wired File components; CAs still stubs):
|
|
- 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 stubs commented (no binaries required)
|
|
|
|
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 stubs are commented below; enable when StageFull + deferred CA tested.
|
|
-->
|
|
<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>
|
|
|
|
<!--
|
|
CustomAction placeholders (NSIS parity) — commented so candle/light need no
|
|
live CA binaries. File components already stage install-printer.ps1.
|
|
Uncomment defs + InstallExecuteSequence together after StageFull smoke
|
|
(see DUAL-SHIP.md VM C). Conditions use XML entities in real attributes.
|
|
|
|
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"
|
|
|
|
<CustomAction Id="CA_StopHelper"
|
|
Directory="System64Folder"
|
|
ExeCommand="cmd.exe /c schtasks /End /TN "Verae Print Helper" & 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 "[INSTALLFOLDER]scripts\install-printer.ps1" -InstallDir "[INSTALLFOLDER]""
|
|
Execute="deferred" Impersonate="no" Return="check" />
|
|
<CustomAction Id="CA_InstallPrintersRollback"
|
|
Directory="INSTALLFOLDER"
|
|
ExeCommand="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File "[INSTALLFOLDER]scripts\uninstall-printer.ps1""
|
|
Execute="rollback" Impersonate="no" Return="ignore" />
|
|
<CustomAction Id="CA_UninstallPrinters"
|
|
Directory="INSTALLFOLDER"
|
|
ExeCommand="powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File "[INSTALLFOLDER]scripts\uninstall-printer.ps1""
|
|
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<>"1"
|
|
</Custom>
|
|
<Custom Action="CA_InstallPrintersRollback" After="CA_InstallPrinters">
|
|
NOT Installed AND VERAE_SKIP_PRINTERS<>"1"
|
|
</Custom>
|
|
<Custom Action="CA_UninstallPrinters" Before="RemoveFiles">
|
|
REMOVE~="ALL"
|
|
</Custom>
|
|
</InstallExecuteSequence>
|
|
-->
|
|
</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 "[ScriptsDir]verae-diag.ps1""
|
|
WorkingDirectory="ScriptsDir" />
|
|
<RegistryValue
|
|
Root="HKLM"
|
|
Key="Software\Verae\PrintStamp\Shortcuts"
|
|
Name="Diag"
|
|
Type="integer"
|
|
Value="1"
|
|
KeyPath="yes" />
|
|
</Component>
|
|
</ComponentGroup>
|
|
</Fragment>
|
|
</Wix>
|