Model the intent

Start with the business outcome, not the installer file. Record supported operating systems, architecture, dependencies, return codes, reboot behavior, and uninstall expectations before creating the application. A small requirements record prevents the console object from becoming the only documentation.

Make detection deterministic

Prefer a versioned registry value or a product code when the vendor maintains it reliably. File-exists rules are useful only when the path is stable across architectures. Never use a process name as the sole signal because a running process says nothing about installed version.

$path = 'HKLM:\SOFTWARE\Contoso\Agent'
$version = (Get-ItemProperty -Path $path -ErrorAction SilentlyContinue).Version
if ([version]$version -ge [version]'4.2.0') { exit 0 }
exit 1

Release with evidence

Test install, repair, upgrade, supersedence, and uninstall as separate paths. Capture the client log, application detection result, and user impact for each. Promote only after the detection rule is validated on both 64-bit and 32-bit locations where the product supports them.

Operational checklist

  • Document dependencies and reboot semantics.
  • Use a version-aware detection rule.
  • Test retry and uninstall behavior.
  • Attach log evidence to the change record.

Related technical articles