↓ Skip to main content
Why WinDirStat MSI Upgrades Are Leaving Older Versions Behind
  1. Patch My PC/
  2. Products/
  3. WinDirStat/

Why WinDirStat MSI Upgrades Are Leaving Older Versions Behind

Michael Escamilla
Author
Michael Escamilla
Table of Contents

I recently investigated why recent WinDirStat MSI installations were not removing previous versions. Older releases remained in Apps & features alongside the new one, even though the installer was configured for a major upgrade.

WinDirStat MSI Multiple Versions Installed

Languages
#

We were unable to reproduce the issue on our lab machines, which had English (1033) installations. However, our customer had French fr-FR (1036) installations.

On a French Windows installation, the MSI logs showed that FindRelatedProducts ran but did not enumerate any matching products. The WIX_UPGRADE_DETECTED property was not set, and no old product was removed.

French Windows Installation MSI Log

What changed with version 2.7.0
#

Before version 2.7.0, the WinDirStat MSI was a single-language installer for English (1033).

Single-Language Installer Prior to Version 2.7.0
Single-Language Installer Prior to Version 2.7.0 showing only English (1033)

Starting with version 2.7.0, the WinDirStat MSI became a multilingual installer capable of handling multiple languages based on the system’s locale.

Multi-Language Installer Starting with Version 2.7.0
Multi-Language Installer Starting with Version 2.7.0 showing multiple languages

Installations Starting with Version 2.7.0
#

On systems with a locale other than English (1033), the multilingual installer applies the appropriate language transform and registers the product using that language. The ARP (Add or Remove Programs) entry below shows that the language was applied correctly on a fr-FR (1036) system.

ARP Entry Showing French Language Applied
ARP Entry Showing French Language Applied

Root Cause: Upgrade Table Language Filter
#

The MSI Upgrade table contains rows that tell Windows Installer which related products to find. In the WinDirStat MSIs I inspected, the major-upgrade and downgrade-detection rows for the current UpgradeCode specified 1033 in the Language column. The major-upgrade row used the WIX_UPGRADE_DETECTED property, while the downgrade row used WIX_DOWNGRADE_DETECTED.

Upgrade Table Language Filter

On the French test machine, the older WinDirStat products were registered with ProductLanguage 1036.

The new installer was therefore effectively asking Windows Installer to find related products with language 1033, while the installed products had language 1036. Because the languages did not match, the installer silently skipped them.

Workarounds
#

This is a potential workaround until the WinDirStat MSI is updated to handle multiple languages correctly in the Upgrade table.

Apply an MST transform
#

You can use Master Packager to create an MST transform that sets the Language value to null in the affected major-upgrade and downgrade rows.

Master Packager Creating MST Transform
Master Packager Creating MST Transform

For example, with a transform prepared for the exact MSI version:

msiexec.exe /i "WinDirStat-x64.msi" TRANSFORMS="fix-lang.mst" /qn ALLUSERS=1 REBOOT=ReallySuppress

The transform must be generated against the MSI being deployed; the Upgrade table’s version conditions can change between releases. Test the transformed package before broad deployment, and follow your organization’s process for signing and distributing installer transforms.

Additional information
#