Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1383)

Unified Diff: chrome/installer/setup/setup_main.cc

Issue 1351453006: Handle upgrade case from previous MSI install. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/setup/setup_main.cc
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index ee2601f50fcf4f65074f4a426bd15201f6a7d62a..08f12921f1bb3f94eaa5aee8a1befe624d3b1803 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -1654,14 +1654,33 @@ InstallStatus InstallProductsHelper(const InstallationState& original_state,
// If the installation completed successfully...
if (InstallUtil::GetInstallReturnCode(install_status) == 0) {
// Update the DisplayVersion created by an MSI-based install.
+ base::FilePath master_preferences_file(
+ installer_state.target_path().AppendASCII(
+ installer::kDefaultMasterPrefs));
std::string install_id;
if (prefs.GetString(installer::master_preferences::kMsiProductId,
&install_id)) {
+ // A currently active MSI install will have specified the master-
+ // preferences file on the command-line that includes the product-id.
+ // We must delay the setting of the DisplayVersion until after the
+ // grandparent "msiexec" process has exited.
base::FilePath new_setup =
installer_state.GetInstallerDirectory(*installer_version)
.Append(kSetupExe);
DelayedOverwriteDisplayVersions(
new_setup, install_id, *installer_version);
+ } else if (base::PathExists(master_preferences_file)) {
grt (UTC plus 2) 2015/09/25 15:01:27 I don't think it's safe to rely on the value being
robertshield 2015/09/25 15:19:20 I tend to agree, relying on master_preferences to
bcwhite 2015/10/01 13:11:53 I'll look into the ClientState key. Is it okay to
grt (UTC plus 2) 2015/10/01 14:37:58 My inclination is to only check the one authoritat
+ // In the case of an original MSI install, the master-preferences file
+ // exists but was not passed on the command-line. We load it explicitly
+ // to get the product-id and then, because there is no "msiexec" process
+ // to out-wait, we set the DisplayVersion immediately.
+ const MasterPreferences mp(master_preferences_file);
+ if (mp.GetString(installer::master_preferences::kMsiProductId,
+ &install_id)) {
+ OverwriteDisplayVersions(base::UTF8ToUTF16(install_id),
+ base::UTF8ToUTF16(
+ installer_version->GetString()));
+ }
}
// Return the path to the directory containing the newly installed
// setup.exe and uncompressed archive if the caller requested it.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698