Bug Report: Duplicate Uninstall Entry After Auto-Update on Windows

Bug Report: Duplicate Uninstall Entry After Auto-Update on Windows

Report ID: (to be assigned)
Zotero Version: 9.0.4 (x64 en-US)
OS: Windows 11 (Build 26200)
Installation Path: D:\ProgramFiles\Zotero

---

Summary

After Zotero auto-updated from 9.0.3 to 9.0.4, the old uninstall registry entry under HKLM was not removed, while a new entry was written under HKCU. This causes third-party uninstaller tools (e.g., Geek Uninstaller) and Windows "Apps & Features" to display two separate Zotero entries for what is actually a single installation.

---

Steps to Reproduce

1. Install Zotero 9.0.3 (x64 en-US) on Windows 11 to a custom directory (D:\ProgramFiles\Zotero).
2. Allow Zotero to auto-update to 9.0.4 via Help -> "Check for Updates" or automatic background update.
3. Open Geek Uninstaller (or Windows Settings -> Apps -> Installed apps).
4. Observe that two Zotero entries appear, with different version numbers.

---

Expected Behavior

Only one uninstall entry should exist, reflecting the currently installed version (9.0.4).

---

Actual Behavior

Two entries are present:

Registry Hive 1: HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
Subkey Name: Zotero 9.0.3 (x64 en-US)
Version: 9.0.3
Install Location: D:\ProgramFiles\Zotero

Registry Hive 2: HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
Subkey Name: Zotero 9.0.4 (x64 en-US)
Version: 9.0.4
Install Location: D:\ProgramFiles\Zotero

Both entries point to the same installation directory and share the same UninstallString:
D:\ProgramFiles\Zotero\uninstall\helper.exe

---

Evidence

Screenshot: Attached image shows the duplicate entries in Geek Uninstaller.

Registry Verification (PowerShell):

HKLM entry (old version):
PS> Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall" |
Get-ItemProperty | Where-Object { $_.DisplayName -like "*Zotero*" } |
Select-Object PSChildName, DisplayVersion, InstallLocation

Result:
PSChildName DisplayVersion InstallLocation
----------- -------------- ---------------
Zotero 9.0.3 (x64 en-US) 9.0.3 D:\ProgramFiles\Zotero

HKCU entry (current version):
PS> Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall" |
Get-ItemProperty | Where-Object { $_.DisplayName -like "*Zotero*" } |
Select-Object PSChildName, DisplayVersion, InstallLocation

Result:
PSChildName DisplayVersion InstallLocation
----------- -------------- ---------------
Zotero 9.0.4 (x64 en-US) 9.0.4 D:\ProgramFiles\Zotero

---

Impact

- User confusion: Appears as if Zotero is installed twice.
- Uninstaller risk: Users may accidentally trigger uninstallation thinking they are removing a duplicate, when both entries reference the same program.
- Registry clutter: Old entries accumulate over multiple update cycles.

---

Workaround (for users)

Manually delete the stale HKLM registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Zotero 9.0.3 (x64 en-US)

Or use Geek Uninstaller's "Delete Entry" function on the older version (avoids running the actual uninstaller).

---

Suggested Fix

The updater should ensure that when a new uninstall entry is written (especially under a different hive like HKCU), the previous entry under HKLM is removed if it points to the same installation directory. Alternatively, the installer/updater should consistently use the same registry hive for uninstall entries.

---

Additional Context

- This is a single-user Windows installation with Zotero installed to a non-default drive (D:\).
- The issue appeared immediately after the auto-update from 9.0.3 to 9.0.4.
- This behavior is reminiscent of Firefox/Gecko-based updater behavior, where registry cleanup during updates can be inconsistent.
Sign In or Register to comment.