Chromium Code Reviews| Index: chrome/installer/util/install_util.cc |
| diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc |
| index aaa5663ccff5a158501e3952c369a30e9930e617..6c96b335d3d27b466fcf575f88f10ab3ad82614f 100644 |
| --- a/chrome/installer/util/install_util.cc |
| +++ b/chrome/installer/util/install_util.cc |
| @@ -286,21 +286,37 @@ void InstallUtil::AddInstallerResultItems( |
| DCHECK(install_list); |
| const HKEY root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| DWORD installer_result = (GetInstallReturnCode(status) == 0) ? 0 : 1; |
| - install_list->AddCreateRegKeyWorkItem(root, state_key); |
| - install_list->AddSetRegValueWorkItem(root, state_key, |
| + install_list->AddCreateRegKeyWorkItem( |
| + root, state_key, WorkItem::kWow64Default); |
| + install_list->AddSetRegValueWorkItem(root, |
| + state_key, |
| installer::kInstallerResult, |
| - installer_result, true); |
| - install_list->AddSetRegValueWorkItem(root, state_key, |
| + installer_result, |
| + true, |
| + WorkItem::kWow64Default); |
| + install_list->AddSetRegValueWorkItem(root, |
| + state_key, |
| installer::kInstallerError, |
| - static_cast<DWORD>(status), true); |
| + static_cast<DWORD>(status), |
| + true, |
| + WorkItem::kWow64Default); |
| if (string_resource_id != 0) { |
| base::string16 msg = installer::GetLocalizedString(string_resource_id); |
| - install_list->AddSetRegValueWorkItem(root, state_key, |
| - installer::kInstallerResultUIString, msg, true); |
| + install_list->AddSetRegValueWorkItem(root, |
| + state_key, |
| + installer::kInstallerResultUIString, |
| + msg, |
| + true, |
| + WorkItem::kWow64Default); |
| } |
| if (launch_cmd != NULL && !launch_cmd->empty()) { |
| - install_list->AddSetRegValueWorkItem(root, state_key, |
| - installer::kInstallerSuccessLaunchCmdLine, *launch_cmd, true); |
| + install_list->AddSetRegValueWorkItem( |
| + root, |
| + state_key, |
| + installer::kInstallerSuccessLaunchCmdLine, |
| + *launch_cmd, |
| + true, |
| + WorkItem::kWow64Default); |
| } |
| } |
| @@ -417,19 +433,16 @@ bool InstallUtil::GetEULASentinelFilePath(base::FilePath* path) { |
| return true; |
| } |
| -// This method tries to delete a registry key and logs an error message |
| -// in case of failure. It returns true if deletion is successful (or the key did |
| -// not exist), otherwise false. |
| -bool InstallUtil::DeleteRegistryKey(HKEY root_key, |
| - const base::string16& key_path) { |
| - VLOG(1) << "Deleting registry key " << key_path; |
| - LONG result = ::SHDeleteKey(root_key, key_path.c_str()); |
| - if (result != ERROR_SUCCESS && result != ERROR_FILE_NOT_FOUND) { |
| - LOG(ERROR) << "Failed to delete registry key: " << key_path |
| - << " error: " << result; |
| - return false; |
| - } |
| - return true; |
| +// Deletes the registry key at path key_path under the key given by root_key. |
| +LONG InstallUtil::DeleteRegistryKey(HKEY root_key, |
|
grt (UTC plus 2)
2014/05/21 16:41:05
previously, this would return true for both succes
Will Harris
2014/05/21 23:23:16
I changed this since it was used by the new code i
grt (UTC plus 2)
2014/05/22 01:37:44
Does it? I could be reading it wrong, but modulo t
Will Harris
2014/05/22 21:29:24
Done.
|
| + const base::string16& key_path, |
| + REGSAM wow64_access) { |
| + RegKey root_regkey; |
| + LONG result = root_regkey.Open(root_key, L"", |
| + KEY_READ | KEY_WRITE | wow64_access); |
| + if (result != ERROR_SUCCESS) |
| + return result; |
| + return root_regkey.DeleteKey(key_path.c_str()); |
| } |
| // This method tries to delete a registry value and logs an error message |
| @@ -456,7 +469,8 @@ InstallUtil::ConditionalDeleteResult InstallUtil::DeleteRegistryKeyIf( |
| const base::string16& key_to_delete_path, |
| const base::string16& key_to_test_path, |
| const wchar_t* value_name, |
| - const RegistryValuePredicate& predicate) { |
| + const RegistryValuePredicate& predicate, |
| + const REGSAM wow64_access) { |
| DCHECK(root_key); |
| ConditionalDeleteResult delete_result = NOT_FOUND; |
| RegKey key; |
| @@ -466,7 +480,8 @@ InstallUtil::ConditionalDeleteResult InstallUtil::DeleteRegistryKeyIf( |
| key.ReadValue(value_name, &actual_value) == ERROR_SUCCESS && |
| predicate.Evaluate(actual_value)) { |
| key.Close(); |
| - delete_result = DeleteRegistryKey(root_key, key_to_delete_path) |
| + LONG result = DeleteRegistryKey(root_key, key_to_delete_path, wow64_access); |
| + delete_result = (result == ERROR_SUCCESS || result == ERROR_FILE_NOT_FOUND) |
| ? DELETED : DELETE_FAILED; |
| } |
| return delete_result; |
| @@ -477,14 +492,16 @@ InstallUtil::ConditionalDeleteResult InstallUtil::DeleteRegistryValueIf( |
| HKEY root_key, |
| const wchar_t* key_path, |
| const wchar_t* value_name, |
| - const RegistryValuePredicate& predicate) { |
| + const RegistryValuePredicate& predicate, |
| + REGSAM wow64_access) { |
| DCHECK(root_key); |
| DCHECK(key_path); |
| ConditionalDeleteResult delete_result = NOT_FOUND; |
| RegKey key; |
| base::string16 actual_value; |
| if (key.Open(root_key, key_path, |
| - KEY_QUERY_VALUE | KEY_SET_VALUE) == ERROR_SUCCESS && |
| + KEY_QUERY_VALUE | KEY_SET_VALUE | wow64_access) |
| + == ERROR_SUCCESS && |
| key.ReadValue(value_name, &actual_value) == ERROR_SUCCESS && |
| predicate.Evaluate(actual_value)) { |
| LONG result = key.DeleteValue(value_name); |