diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index 4d43357fa80c0..6feb09e074871 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -26,6 +26,7 @@ const auto updateAvailableC = QStringLiteral("Updater/updateAvailable"); const auto updateTargetVersionC = QStringLiteral("Updater/updateTargetVersion"); const auto updateTargetVersionStringC = QStringLiteral("Updater/updateTargetVersionString"); const auto autoUpdateAttemptedC = QStringLiteral("Updater/autoUpdateAttempted"); +const auto msiLogFileNameC = QStringLiteral("msi.log"); } UpdaterScheduler::UpdaterScheduler(QObject *parent) @@ -219,7 +220,7 @@ void OCUpdater::slotStartInstaller() return QDir::toNativeSeparators(path); }; - QString msiLogFile = cfg.configPath() + "msi.log"; + QString msiLogFile = cfg.configPath() + msiLogFileNameC; QString command = QStringLiteral("&{msiexec /i '%1' /L*V '%2'| Out-Null ; &'%3'}") .arg(preparePathForPowershell(updateFile)) .arg(preparePathForPowershell(msiLogFile)) @@ -304,8 +305,21 @@ void NSISUpdater::wipeUpdateData() ConfigFile cfg; QSettings settings(cfg.configFile(), QSettings::IniFormat); QString updateFileName = settings.value(updateAvailableC).toString(); - if (!updateFileName.isEmpty()) - QFile::remove(updateFileName); + if (!updateFileName.isEmpty()) { + if (QFile::remove(updateFileName)) { + qCInfo(lcUpdater) << "Removed updater file:" << updateFileName; + } else { + qCWarning(lcUpdater) << "Failed to remove updater file:" << updateFileName; + } + } + // Also try to remove the msi log file (created when running msiexec) + QString msiLogFileName = cfg.configPath() + msiLogFileNameC; + if (QFile::remove(msiLogFileName)) { + qCInfo(lcUpdater) << "Removed msi log file:" << msiLogFileName; + } else { + qCWarning(lcUpdater) << "Failed to remove msi log file:" << msiLogFileName; + } + settings.remove(updateAvailableC); settings.remove(updateTargetVersionC); settings.remove(updateTargetVersionStringC); @@ -522,6 +536,13 @@ bool NSISUpdater::handleStartup() return false; } } else { + // No internal updater was executed (possible manual install). + // If the app has already been upgraded externally, clean up leftover msi and log files. + if (updateSucceeded()) { + qCInfo(lcUpdater) << "Detected externally installed update - cleaning leftover msi and log files."; + wipeUpdateData(); + return false; + } qCInfo(lcUpdater) << "Triggering an update"; return performUpdate(); }