diff options
author | kuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-07 23:40:38 +0000 |
---|---|---|
committer | kuchhal@chromium.org <kuchhal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-07 23:40:38 +0000 |
commit | 28c196952f639ae961bfb63365362a15ed2e34d7 (patch) | |
tree | d335385079d0b494648e615c0ca3c335670d0221 /chrome/installer/setup/install.cc | |
parent | 19ef18a1027eaa9eb95bc89bf7fb27c102a24c16 (diff) | |
download | chromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.zip chromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.tar.gz chromium_src-28c196952f639ae961bfb63365362a15ed2e34d7.tar.bz2 |
* Check the presence of new_chrome.exe before using opv key for version.
Review URL: http://codereview.chromium.org/10214
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5035 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/installer/setup/install.cc')
-rw-r--r-- | chrome/installer/setup/install.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc index b051f82..7543212 100644 --- a/chrome/installer/setup/install.cc +++ b/chrome/installer/setup/install.cc @@ -160,13 +160,13 @@ bool installer::InstallNewVersion(const std::wstring& exe_path, std::wstring new_chrome_exe = AppendPath(install_path, installer_util::kChromeNewExe); BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - RegKey chrome_key(reg_root, dist->GetVersionKey().c_str(), - KEY_READ | KEY_WRITE); + RegKey chrome_key(reg_root, dist->GetVersionKey().c_str(), KEY_READ); std::wstring current_version; if (file_util::PathExists(new_chrome_exe)) chrome_key.ReadValue(google_update::kRegOldVersionField, ¤t_version); if (current_version.empty()) chrome_key.ReadValue(google_update::kRegVersionField, ¤t_version); + chrome_key.Close(); install_list->AddDeleteTreeWorkItem(new_chrome_exe, std::wstring()); install_list->AddCopyTreeWorkItem( @@ -250,11 +250,17 @@ bool installer::InstallNewVersion(const std::wstring& exe_path, } } } else { - if (chrome_key.ValueExists(google_update::kRegOldVersionField) && - !chrome_key.DeleteValue(google_update::kRegOldVersionField)) { - LOG(ERROR) << "New chrome.exe doesn't exist but failed to delete " - << "old version value in registry."; + scoped_ptr<WorkItemList> inuse_list(WorkItem::CreateWorkItemList()); + inuse_list->AddDeleteRegValueWorkItem(reg_root, version_key, + google_update::kRegOldVersionField, + true); + inuse_list->AddDeleteRegValueWorkItem(reg_root, version_key, + google_update::kRegRenameCmdField, + true); + if (!inuse_list->Do()) { + LOG(ERROR) << "Couldn't write old version/rename value to registry."; success = false; + inuse_list->Rollback(); } } } |