diff --git a/browser/installer/windows/nsis/maintenanceservice_installer.nsi b/browser/installer/windows/nsis/maintenanceservice_installer.nsi index f717764c2996..2b38da2da975 100644 --- a/browser/installer/windows/nsis/maintenanceservice_installer.nsi +++ b/browser/installer/windows/nsis/maintenanceservice_installer.nsi @@ -72,6 +72,8 @@ InstallDirRegKey HKLM "Software\Mozilla\MaintenanceService" "" SetOverwrite on +; serviceinstall.cpp also uses this key, in case the path is changed, update +; there too. !define MaintUninstallKey \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\MozillaMaintenanceService" diff --git a/toolkit/components/maintenanceservice/serviceinstall.cpp b/toolkit/components/maintenanceservice/serviceinstall.cpp index fda3e7bbd0b9..3b9522d47c3c 100644 --- a/toolkit/components/maintenanceservice/serviceinstall.cpp +++ b/toolkit/components/maintenanceservice/serviceinstall.cpp @@ -22,6 +22,27 @@ #pragma comment(lib, "version.lib") +// This uninstall key is defined originally in maintenanceservice_installer.nsi +#define MAINT_UNINSTALL_KEY L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MozillaMaintenanceService" + +static BOOL +UpdateUninstallerVersionString(LPWSTR versionString) +{ + HKEY uninstallKey; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + MAINT_UNINSTALL_KEY, 0, + KEY_WRITE | KEY_WOW64_32KEY, + &uninstallKey) != ERROR_SUCCESS) { + return FALSE; + } + + LONG rv = RegSetValueExW(uninstallKey, L"DisplayVersion", 0, REG_SZ, + reinterpret_cast(versionString), + (wcslen(versionString) + 1) * sizeof(WCHAR)); + RegCloseKey(uninstallKey); + return rv == ERROR_SUCCESS; +} + /** * A wrapper function to read strings for the maintenance service. * @@ -433,6 +454,11 @@ SvcInstall(SvcInstallAction action) result = FALSE; } } else { + WCHAR versionStr[128] = { L'\0' }; + swprintf(versionStr, 128, L"%d.%d.%d.%d", newA, newB, newC, newD); + if (!UpdateUninstallerVersionString(versionStr)) { + LOG(("The uninstaller version string could not be updated.")); + } LOG(("The new service binary was copied in.")); }