Troubleshooting MSP (Windows installer patch) Deployment Failures
An MSP patch deployment can fail with Exit Code 1 even when the download step completes successfully and the patch installs fine manually. This article explains what causes MSP patch failures in PDQ Connect, how to diagnose them, and how to prevent them.
What is an MSP patch?
An .msp (Windows Installer patch) file updates an existing installation of a product that was originally installed using a .msi (Windows Installer package). Unlike a full installer, an MSP patch requires the base application to already be installed on the target device. If the base application is missing or the installed version is incompatible with the patch, then the patch will fail.
PDQ Connect supports .msp as an installer type in the Install Step of a custom package. See Custom Packages for more information.
Common causes of MSP patch failures (Exit Code 1)
When an MSP patch step fails to install, it means msiexec.exe encountered an error while applying the patch. The most common causes are:
- Base application is not installed — The patch cannot be applied if the base application is not present on the target device. MSP patches update an existing installation; they cannot install the application from scratch.
- Incompatible application version — Each MSP patch targets a specific version or range of versions of the base application. If the installed version does not match what the patch expects, the patch will fail.
- Architecture mismatch — A 32-bit MSP patch cannot be applied to a 64-bit installation, and vice versa. Make sure the patch and the installed application share the same architecture.
-
Patch already applied — If the patch has already been installed on the target device,
msiexec.exewill return an error rather than apply it a second time.
MSIExec exit code vs. "Package is Incompatible" — These are two different errors. If the PDQ Connect Agent tried to run msiexec and the installation failed, it may throw a specific error code which points to the cause of the failure. If you see the error "Package is Incompatible", this is a PDQ Connect-level check that runs before deployment begins, based on the OS version and architecture data PDQ Connect has collected for the device. See Package is Incompatible for details.
How to diagnose MSP patch failures
When a deployment fails, PDQ Connect captures detailed output from the deployment step. Use the following steps to identify the specific error:
- Go to the Deployments page in PDQ Connect.
- Find the deployment in the list and click the number under the Failed column (red exclamation point).
- On the failed deployments page, in the Output log column for the affected device click View output to view the full Output log. Look for error messages or codes returned by
msiexec.exe.
For more detail on retrieving and reading output logs, see Output logs.
How to prevent MSP patch failures
The most reliable way to prevent MSP patch failures is to use Package Step Conditions to verify the target device meets the required criteria before the patch step runs. This way, the step is skipped on devices where the patch would fail, rather than failing with an error.
The following conditions are most useful for MSP patch deployments:
-
Registry condition — Check for a registry key that confirms the correct version of the base application is installed. Application installations typically write version information to
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\or the 32-bit equivalent path. - Files & Folders condition — Check for the presence of a key application file (such as the main executable) to confirm the application is installed before attempting to patch it.
To add a condition to a package step, open the package, click on the step, then click Add condition. For full details on available conditions and how to configure them, see Package & Step Conditions.
Always verify the architecture of both the MSP patch and the installed application before deploying. A 32-bit patch and a 64-bit installation will have different registry paths and executable locations, so make sure your conditions check the correct path for your environment.