Fix it now
0x80070643 is the HRESULT form of Windows Installer return code 1603, which Microsoft publishes as a fatal error during installation. It is generic by design and names nothing. The setup log names the task that failed, and reading it is the entire job.
Get-Command ExSetup.exe | ForEach-Object {$_.FileVersionInfo}
Test-ServiceHealth
- Open C:\ExchangeSetupLogs\ExchangeSetup.log and search backwards from the end for the first error. The task named immediately before it is what failed.
- Note which layer it came from. A code in the 0x8013 range belongs to the .NET runtime’s HRESULT constants, which means an Exchange setup task threw rather than the installer failing to copy a file.
- Check the ordinary blockers before rerunning: a pending reboot, free disk space, third-party transport agents still installed, and prerequisites below the level this build needs.
- Reboot the server, then rerun from an elevated Command Prompt: Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataON /Mode:Upgrade
- Let it finish, then reboot again. Microsoft requires a restart after an update so registry and operating system changes can be made.
The older /IAcceptExchangeServerLicenseTerms switch stopped working with the September 2021 cumulative updates. Unattended and scripted installs must use the _DiagnosticDataON or _DiagnosticDataOFF form.
If the log records completion and Test-ServiceHealth is clean, you are done. If setup will not start at all rather than failing partway, that is a different problem with its own fix.
Why it happens
An Exchange update is not one operation. Setup unpacks files, applies installer actions, then runs a long list of configuration tasks that touch Active Directory, the file system, IIS and the services. A failure anywhere in that sequence aborts the run and rolls back what it can. Microsoft publishes 1603 as ERROR_INSTALL_FAILURE, a fatal error occurred during installation, and 0x80070643 is the same number expressed as an HRESULT: 0x8007 is the HRESULT form of a Win32 error and 0x643 is 1603. Neither identifies the task.
A code in the 0x8013 range is more informative. Microsoft documents the .NET runtime’s HRESULT constants as using that prefix, so a value in that range means the failure was raised by managed code – in this context, one of Exchange’s own setup tasks rather than the installer. The setup log records the task name and the exception together, and the exception is usually specific enough to act on.
Two product facts shape what you should do next. Exchange Server 2016 and 2019 went out of support on 14 October 2025, with Extended Security Update enrolment as the only route to further security updates for them. Exchange Server Subscription Edition, released on 1 July 2025, is serviced with Security Updates and Hotfix Updates rather than cumulative updates. So ‘rerun the CU’ applies to a 2016 or 2019 server; on Subscription Edition the package you are retrying is an SU or an HU, launched the same way and just as elevated.
A reboot or another installation was pending
You have this one if Setup fails early, and the log complains before it reaches any Exchange-specific task.
- Reboot the server and let any outstanding Windows updates finish installing completely. Microsoft’s own guidance is to reboot the server beforehand.
- Confirm no other installation is in progress, including management agents that update themselves on a schedule.
- Run setup again from an elevated Command Prompt on the console rather than through a remote session that might drop.
A remote session that disconnects partway through an update leaves exactly the mess this article is about. Use a console session or one that survives a disconnect.
Prerequisites are below the level the build requires
You have this one if The log names a component or framework rather than an Exchange task.
- Check the prerequisites listed for the exact build you are installing, including the framework, the runtime redistributables and the communications API package.
- Install what is missing, reboot, and rerun setup. Prerequisites are version-specific, so what satisfied the previous update may not satisfy this one.
- Do not upgrade the framework and Exchange in the same maintenance window if you can avoid it. Doing them separately means you know which one broke.
A third-party agent or security product is in the way
You have this one if The failure lands on a transport or service task, and the server runs third-party transport agents or an aggressive endpoint product.
- List loaded agents with
Get-TransportAgentand uninstall third-party ones before the update, then install the version built for the new build afterwards. Microsoft names incompatible transport agents after an Exchange update as a documented cause of transport problems. - Confirm the antivirus exclusions Microsoft publishes for Exchange are in place, and consider disabling on-access scanning for the duration of the update.
- Check the setup log for access denied entries against file or registry paths, which is what an interfering product usually produces.
The account or the directory is not ready
You have this one if The failure occurs in a task that reads or writes Active Directory.
- Confirm the account running setup holds the group memberships the operation needs, and is not blocked by a protected-account policy that strips inherited rights.
- Confirm the directory preparation for this build completed and replicated before you started on the servers.
- Confirm the server is using a writable domain controller in its own site, and pin it with /DomainController:<ServerFQDN> while you run the update if necessary.
Full reference
The command line, exactly
<drive>:\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataON /Mode:Upgrade [/DomainController:<ServerFQDN>] [/EnableErrorReporting]
Microsoft’s example is E:\Setup.exe /IAcceptExchangeServerLicenseTerms_DiagnosticDataON /Mode:Upgrade /DomainController:dc01.contoso.com. Use _DiagnosticDataOFF instead if you do not want diagnostic data sent. The switch matters: Microsoft states that the previous /IAcceptExchangeServerLicenseTerms switch does not work from the September 2021 cumulative updates onwards, and unattended or scripted installs must use one of the two newer forms.
Do not roll back a virtual machine snapshot to undo a failed update on a domain-joined Exchange server. Reverting the machine does not revert the Active Directory changes setup already made. Microsoft’s own position on going backwards is blunt: after you upgrade to a newer build you cannot uninstall it to revert, because uninstalling removes Exchange from the server completely.
What each code contributes
| Code | Published meaning | What it tells you |
|---|---|---|
1603 |
ERROR_INSTALL_FAILURE: a fatal error occurred during installation | That setup failed. Nothing about where |
0x80070643 |
The same 1603 expressed as an HRESULT | The same information, in hexadecimal |
0x80131500 |
Not published individually. The 0x8013 prefix is the .NET runtime’s HRESULT range | That managed code threw, so read the setup task rather than the file operations |
Reading the setup log properly
- Open C:\ExchangeSetupLogs\ExchangeSetup.log and go to the end.
- Search backwards for the first error entry rather than the first mention of a failure; the rollback that follows generates a lot of noise.
- Read the task name immediately above it. That is the operation that failed.
- Read the exception text with it. That is what you search on, and what a support engineer needs.
- Note the timestamp and compare it with the Application and System logs for the same second, which often names the underlying access denial or service timeout.
Supportability before you spend a night on it
Establish which product you are patching. Exchange Server 2016 and 2019 are out of support; customers enrolled in the Extended Security Update programme continue to receive security updates for them, and everyone else is expected to move to Exchange Server Subscription Edition. Subscription Edition released on 1 July 2025 and is serviced by Security Updates and Hotfix Updates rather than cumulative updates, which changes what ‘the current update’ means and what a rerun will do.
Before the next attempt
- Reboot first and reboot after. Microsoft asks for both, and half the failures in this family are pending-reboot state.
- Run from the console with an elevated Command Prompt, not a remote session that can drop.
- Take the server out of service properly if it is a DAG member, so a failover during setup does not add a second incident.
- Keep the media that matches the build you are resuming. Changing build partway through is the fastest way to make this considerably worse.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
0x80070643 |
The HRESULT form of Windows Installer return code 1603: 0x8007 is the HRESULT wrapper for a Win32 error and 0x643 is 1603, ERROR_INSTALL_FAILURE | Microsoft Learn |
1603 |
ERROR_INSTALL_FAILURE: a fatal error occurred during installation. Generic by design; the setup log holds the specific cause | Microsoft Learn |
0x80131500 |
Not published individually by Microsoft. What is documented is that the .NET runtime’s HRESULT constants use the 0x8013 prefix, so a code in that range means a managed exception surfaced through setup rather than an installer file operation | not published by the vendor |
Confirm the fix worked
- The end of C:\ExchangeSetupLogs\ExchangeSetup.log records a successful completion rather than a rollback.
Get-Command ExSetup.exe | ForEach-Object {$_.FileVersionInfo}reports the build you intended, checked against Microsoft’s build number reference.Test-ServiceHealthreports every required service running after the post-update reboot.- Mail flows in and out, and both the management shell and the admin centre open.
Questions people ask about this
Does this cost anything to fix?
No. A failed update is a support problem and the update itself is included with your existing licensing. The only situation with a cost attached is a version that has left support, where there is no current update to install at all.
Which licence terms switch do I use?
/IAcceptExchangeServerLicenseTerms_DiagnosticDataON or /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF. Microsoft states the older /IAcceptExchangeServerLicenseTerms switch stopped working with the September 2021 cumulative updates.
Is the server safe to leave running after a rollback?
Usually, because setup rolls back what it applied, but treat it as a server in a known-bad state. Confirm the services are running and mail is flowing, then finish the update at the first opportunity.
Can I uninstall the update to get back to where I was?
No. Microsoft states that after upgrading to a newer build you cannot uninstall it to revert to the previous version, because uninstalling removes Exchange from the server completely.
Should I open a support case?
If the setup log names an exception you cannot resolve, yes, and go in with the log rather than the error code. The code appears on tens of thousands of unrelated failures and tells an engineer nothing on its own.
