https://bugs.winehq.org/show_bug.cgi?id=41361
Bug ID: 41361 Summary: MSI uninstaller calls wrong Custom Action and performs wrong action Product: Wine Version: 1.9.19 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: msi Assignee: wine-bugs@winehq.org Reporter: reinhold.hoffmann@hotmail.com Distribution: ---
Created attachment 55713 --> https://bugs.winehq.org/attachment.cgi?id=55713 msi with special prepared custom actions to show the bug
In certain situation the MSI uninstaller calls a wrong custom action. When an app is installed and the same app msi installation is called again, this app should be repaired or removed. This is initiated properly but for "Remove" the wrong custom action is called and the software is not removed.
I have prepared a dummy repro based on the installer of Notation Player, please find attached. This repro contains of 4 custom actions.
- Install after the software is installed but not yet registered
- Commit when the software is installed and registered in the Registry just before the end of the installaion process
- Rollback when a Rollback is performed
- Uninstall when an uninstallation is performed.
The custom action of the repro in all cases simply displays which custom action is called.
How to reproduce the failure: ------------------------------
Scenario 1: Installation OK: custom actions Install and Commit are called
Scenario 2: OK: when uninstalling with uninstaller the Uninstall custom action is called
FAILURE situation: ------------------
Perform Scenario 1. Perform Scenario 1 again
Here the according Repair/Remove window pops up. When selecting "Repair" the Install and Commit actions are called. This is correct.
But when selecting "Remove" the Install and Commit custom action are called, too. This is wrong. When selecting "Remove" the Uninstall custom action had to be called and the software needs to be removed. The uninstaller confirmes that the app has been successfully removed. Indeed, the uninstaller shows that the software is removed but it is not. The software is not removed but still exists.
For a sophisticated custom action handling this scenario brings the system into an undefined state. An experienced person is required to fix this situation.