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

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

Issue 300593002: Make omaha, gcapi and uninstall registry accesses use Wow6432Node on 64-bit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move the uninstall registry access to 32-bit Created 6 years, 7 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
Index: chrome/installer/setup/install_worker.cc
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc
index b8bab9bef0e3b286f89d1395cbb669e6f78c83e1..86d722ddcea0ebb10f321269a4ef6d299a7d7a55 100644
--- a/chrome/installer/setup/install_worker.cc
+++ b/chrome/installer/setup/install_worker.cc
@@ -216,7 +216,7 @@ void AddCommandWithParameterWorkItems(const InstallerState& installer_state,
if (installer_state.operation() == InstallerState::UNINSTALL) {
work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
full_cmd_key,
- WorkItem::kWow64Default)
+ KEY_WOW64_32KEY)
->set_log_message("removing " + base::UTF16ToASCII(command_key) +
" command");
} else {
@@ -442,7 +442,7 @@ void AddDeleteUninstallShortcutsForMSIWorkItems(
base::string16 uninstall_reg(product.distribution()->GetUninstallRegPath());
WorkItem* delete_reg_key = work_item_list->AddDeleteRegKeyWorkItem(
- reg_root, uninstall_reg, WorkItem::kWow64Default);
+ reg_root, uninstall_reg, KEY_WOW64_32KEY);
grt (UTC plus 2) 2014/05/27 16:42:08 as with my comment on line 734, i think this shoul
delete_reg_key->set_ignore_failure(true);
// Then attempt to delete the old installation's start menu shortcut.
@@ -611,9 +611,17 @@ void AddUninstallDelegateExecuteWorkItems(
WorkItemList* list) {
VLOG(1) << "Adding unregistration items for DelegateExecute verb handler in "
<< root;
+ // Delete both 64 and 32 keys to clean up from previous installs which placed
+ // the delegate registration key in the wrong hive.
grt (UTC plus 2) 2014/05/27 16:42:08 "in the wrong hive" makes it sound like previous i
Will Harris 2014/05/27 19:25:10 Done.
+ // See http://crbug.com/348626.
list->AddDeleteRegKeyWorkItem(root,
delegate_execute_path,
- WorkItem::kWow64Default);
+ KEY_WOW64_32KEY);
+
+ list->AddDeleteRegKeyWorkItem(root,
+ delegate_execute_path,
+ KEY_WOW64_64KEY);
+
// In the past, the ICommandExecuteImpl interface and a TypeLib were both
// registered. Remove these since this operation may be updating a machine
@@ -699,17 +707,17 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
base::string16 update_state_key(browser_dist->GetStateKey());
install_list->AddCreateRegKeyWorkItem(
- reg_root, update_state_key, WorkItem::kWow64Default);
+ reg_root, update_state_key, KEY_WOW64_32KEY);
install_list->AddSetRegValueWorkItem(reg_root,
update_state_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
installer::kUninstallStringField,
installer_path.value(),
true);
install_list->AddSetRegValueWorkItem(
reg_root,
update_state_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
installer::kUninstallArgumentsField,
uninstall_arguments.GetCommandLineString(),
true);
@@ -723,23 +731,23 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
base::string16 uninstall_reg = browser_dist->GetUninstallRegPath();
install_list->AddCreateRegKeyWorkItem(
- reg_root, uninstall_reg, WorkItem::kWow64Default);
+ reg_root, uninstall_reg, KEY_WOW64_32KEY);
grt (UTC plus 2) 2014/05/27 16:42:08 why force the add/remove control panel data into t
Will Harris 2014/05/27 19:25:10 as discussed, while we're leaving Chrome in C:\Pro
grt (UTC plus 2) 2014/05/27 22:06:19 SGTM
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
installer::kUninstallDisplayNameField,
browser_dist->GetDisplayName(),
true);
install_list->AddSetRegValueWorkItem(
reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
installer::kUninstallStringField,
quoted_uninstall_cmd.GetCommandLineString(),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"InstallLocation",
install_path.value(),
true);
@@ -750,44 +758,44 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
dist->GetIconIndex(BrowserDistribution::SHORTCUT_CHROME));
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"DisplayIcon",
chrome_icon,
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"NoModify",
static_cast<DWORD>(1),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"NoRepair",
static_cast<DWORD>(1),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"Publisher",
browser_dist->GetPublisherName(),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"Version",
ASCIIToWide(new_version.GetString()),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"DisplayVersion",
ASCIIToWide(new_version.GetString()),
true);
install_list->AddSetRegValueWorkItem(reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"InstallDate",
InstallUtil::GetCurrentDate(),
false);
grt (UTC plus 2) 2014/05/27 16:42:08 it'd be nice to preserve the InstallDate when migr
Will Harris 2014/05/27 19:25:10 pretty sure this code does preserve, since it's on
grt (UTC plus 2) 2014/05/27 22:06:19 i was referring to the (future) case where the uni
Will Harris 2014/05/27 22:29:28 Put a TODO so I don't forget to do this.
@@ -798,14 +806,14 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
install_list->AddSetRegValueWorkItem(
reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"VersionMajor",
static_cast<DWORD>(version_components[2]),
true);
install_list->AddSetRegValueWorkItem(
reg_root,
uninstall_reg,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
L"VersionMinor",
static_cast<DWORD>(version_components[3]),
true);
@@ -823,18 +831,18 @@ void AddVersionKeyWorkItems(HKEY root,
// Create Version key for each distribution (if not already present) and set
// the new product version as the last step.
base::string16 version_key(dist->GetVersionKey());
- list->AddCreateRegKeyWorkItem(root, version_key, WorkItem::kWow64Default);
+ list->AddCreateRegKeyWorkItem(root, version_key, KEY_WOW64_32KEY);
base::string16 product_name(dist->GetDisplayName());
list->AddSetRegValueWorkItem(root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegNameField,
product_name,
true); // overwrite name also
list->AddSetRegValueWorkItem(root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegOopcrashesField,
static_cast<DWORD>(1),
false); // set during first install
@@ -847,14 +855,14 @@ void AddVersionKeyWorkItems(HKEY root,
language.resize(2);
list->AddSetRegValueWorkItem(root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegLangField,
language,
false); // do not overwrite language
}
list->AddSetRegValueWorkItem(root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegVersionField,
ASCIIToWide(new_version.GetString()),
true); // overwrite version
@@ -897,11 +905,11 @@ void AddOemInstallWorkItems(const InstallationState& original_state,
<< BrowserDistribution::GetSpecificDistribution(source_type)->
GetDisplayName();
install_list->AddCreateRegKeyWorkItem(
- root_key, multi_key, WorkItem::kWow64Default);
+ root_key, multi_key, KEY_WOW64_32KEY);
// Always overwrite an old value.
install_list->AddSetRegValueWorkItem(root_key,
multi_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegOemInstallField,
oem_install,
true);
@@ -910,7 +918,7 @@ void AddOemInstallWorkItems(const InstallationState& original_state,
install_list->AddDeleteRegValueWorkItem(
root_key,
multi_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegOemInstallField);
}
}
@@ -959,10 +967,10 @@ void AddEulaAcceptedWorkItems(const InstallationState& original_state,
<< BrowserDistribution::GetSpecificDistribution(product_type)->
GetDisplayName();
install_list->AddCreateRegKeyWorkItem(
- root_key, multi_key, WorkItem::kWow64Default);
+ root_key, multi_key, KEY_WOW64_32KEY);
install_list->AddSetRegValueWorkItem(root_key,
multi_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegEULAAceptedField,
eula_accepted,
true);
@@ -971,7 +979,7 @@ void AddEulaAcceptedWorkItems(const InstallationState& original_state,
install_list->AddDeleteRegValueWorkItem(
root_key,
multi_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegEULAAceptedField);
}
}
@@ -1000,7 +1008,7 @@ void AddGoogleUpdateWorkItems(const InstallationState& original_state,
root_key,
installer_state.multi_package_binaries_distribution()
->GetStateMediumKey().c_str(),
- WorkItem::kWow64Default);
+ KEY_WOW64_32KEY);
}
// Creating the ClientState key for binaries, if we're migrating to multi then
@@ -1013,12 +1021,12 @@ void AddGoogleUpdateWorkItems(const InstallationState& original_state,
const base::string16& brand(chrome_product_state->brand());
if (!brand.empty()) {
install_list->AddCreateRegKeyWorkItem(
- root_key, multi_key, WorkItem::kWow64Default);
+ root_key, multi_key, KEY_WOW64_32KEY);
// Write Chrome's brand code to the multi key. Never overwrite the value
// if one is already present (although this shouldn't happen).
install_list->AddSetRegValueWorkItem(root_key,
multi_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegBrandField,
brand,
false);
@@ -1062,12 +1070,12 @@ void AddUsageStatsWorkItems(const InstallationState& original_state,
base::string16 state_key(
installer_state.multi_package_binaries_distribution()->GetStateKey());
install_list->AddCreateRegKeyWorkItem(
- root_key, state_key, WorkItem::kWow64Default);
+ root_key, state_key, KEY_WOW64_32KEY);
// Overwrite any existing value so that overinstalls (where Omaha writes a
// new value into a product's state key) pick up the correct value.
install_list->AddSetRegValueWorkItem(root_key,
state_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegUsageStatsField,
usagestats,
true);
@@ -1081,20 +1089,20 @@ void AddUsageStatsWorkItems(const InstallationState& original_state,
install_list->AddDeleteRegValueWorkItem(
root_key,
dist->GetStateMediumKey(),
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegUsageStatsField);
// Previous versions of Chrome also wrote a value in HKCU even for
// system-level installs, so clean that up.
install_list->AddDeleteRegValueWorkItem(
HKEY_CURRENT_USER,
dist->GetStateKey(),
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegUsageStatsField);
}
install_list->AddDeleteRegValueWorkItem(
root_key,
dist->GetStateKey(),
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegUsageStatsField);
}
}
@@ -1148,7 +1156,7 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
in_use_update_work_items->AddSetRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegOldVersionField,
ASCIIToWide(current_version->GetString()),
true);
@@ -1157,7 +1165,7 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
in_use_update_work_items->AddSetRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegCriticalVersionField,
ASCIIToWide(critical_version.GetString()),
true);
@@ -1165,7 +1173,7 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
in_use_update_work_items->AddDeleteRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegCriticalVersionField);
}
@@ -1180,7 +1188,7 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
in_use_update_work_items->AddSetRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegRenameCmdField,
product_rename_cmd.GetCommandLineString(),
true);
@@ -1204,17 +1212,17 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
regular_update_work_items->AddDeleteRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegOldVersionField);
regular_update_work_items->AddDeleteRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegCriticalVersionField);
regular_update_work_items->AddDeleteRegValueWorkItem(
root,
version_key,
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegRenameCmdField);
}
@@ -1379,7 +1387,7 @@ void AddSetMsiMarkerWorkItem(const InstallerState& installer_state,
WorkItem* set_msi_work_item =
work_item_list->AddSetRegValueWorkItem(installer_state.root_key(),
dist->GetStateKey(),
- WorkItem::kWow64Default,
+ KEY_WOW64_32KEY,
google_update::kRegMSIField,
msi_value,
true);
@@ -1589,7 +1597,7 @@ void AddOsUpgradeWorkItems(const InstallerState& installer_state,
if (installer_state.operation() == InstallerState::UNINSTALL) {
install_list->AddDeleteRegKeyWorkItem(
- root_key, cmd_key, WorkItem::kWow64Default)
+ root_key, cmd_key, KEY_WOW64_32KEY)
->set_log_message("Removing OS upgrade command");
} else {
// Register with Google Update to have setup.exe --on-os-upgrade called on
@@ -1622,7 +1630,7 @@ void AddQueryEULAAcceptanceWorkItems(const InstallerState& installer_state,
GetRegCommandKey(product.distribution(), kCmdQueryEULAAcceptance));
if (installer_state.operation() == InstallerState::UNINSTALL) {
work_item_list->AddDeleteRegKeyWorkItem(
- root_key, cmd_key, WorkItem::kWow64Default)
+ root_key, cmd_key, KEY_WOW64_32KEY)
->set_log_message("Removing query EULA acceptance command");
} else {
CommandLine cmd_line(installer_state
@@ -1653,7 +1661,7 @@ void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
// Do this even if multi-install Chrome isn't installed to ensure that it is
// not left behind in any case.
work_item_list->AddDeleteRegKeyWorkItem(
- installer_state.root_key(), cmd_key, WorkItem::kWow64Default)
+ installer_state.root_key(), cmd_key, KEY_WOW64_32KEY)
->set_log_message("removing " +
base::UTF16ToASCII(kCmdQuickEnableCf) + " command");
}

Powered by Google App Engine
This is Rietveld 408576698