OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // See the corresponding header file for description of the functions in this | 5 // See the corresponding header file for description of the functions in this |
6 // file. | 6 // file. |
7 | 7 |
8 #include "chrome/installer/util/install_util.h" | 8 #include "chrome/installer/util/install_util.h" |
9 | 9 |
10 #include <shellapi.h> | 10 #include <shellapi.h> |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 RegKey key(root, dist->GetUninstallRegPath().c_str(), KEY_READ); | 75 RegKey key(root, dist->GetUninstallRegPath().c_str(), KEY_READ); |
76 std::wstring uninstall_cmd; | 76 std::wstring uninstall_cmd; |
77 key.ReadValue(installer::kUninstallStringField, &uninstall_cmd); | 77 key.ReadValue(installer::kUninstallStringField, &uninstall_cmd); |
78 return uninstall_cmd; | 78 return uninstall_cmd; |
79 } | 79 } |
80 | 80 |
81 Version* InstallUtil::GetChromeVersion(BrowserDistribution* dist, | 81 Version* InstallUtil::GetChromeVersion(BrowserDistribution* dist, |
82 bool system_install) { | 82 bool system_install) { |
83 DCHECK(dist); | 83 DCHECK(dist); |
84 RegKey key; | 84 RegKey key; |
| 85 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 86 LONG result = key.Open(reg_root, dist->GetVersionKey().c_str(), KEY_READ); |
| 87 |
85 std::wstring version_str; | 88 std::wstring version_str; |
| 89 if (result == ERROR_SUCCESS) |
| 90 result = key.ReadValue(google_update::kRegVersionField, &version_str); |
86 | 91 |
87 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 92 Version* ret = NULL; |
88 if (!key.Open(reg_root, dist->GetVersionKey().c_str(), KEY_READ) || | 93 if (result == ERROR_SUCCESS && !version_str.empty()) { |
89 !key.ReadValue(google_update::kRegVersionField, &version_str)) { | 94 VLOG(1) << "Existing " << dist->GetApplicationName() |
| 95 << " version found " << version_str; |
| 96 ret = Version::GetVersionFromString(WideToASCII(version_str)); |
| 97 } else { |
| 98 DCHECK_EQ(ERROR_FILE_NOT_FOUND, result); |
90 VLOG(1) << "No existing " << dist->GetApplicationName() | 99 VLOG(1) << "No existing " << dist->GetApplicationName() |
91 << " install found."; | 100 << " install found."; |
92 key.Close(); | |
93 return NULL; | |
94 } | 101 } |
95 key.Close(); | 102 |
96 VLOG(1) << "Existing " << dist->GetApplicationName() | 103 return ret; |
97 << " version found " << version_str; | |
98 return Version::GetVersionFromString(WideToASCII(version_str)); | |
99 } | 104 } |
100 | 105 |
101 bool InstallUtil::IsOSSupported() { | 106 bool InstallUtil::IsOSSupported() { |
102 int major, minor; | 107 int major, minor; |
103 base::win::Version version = base::win::GetVersion(); | 108 base::win::Version version = base::win::GetVersion(); |
104 base::win::GetServicePackLevel(&major, &minor); | 109 base::win::GetServicePackLevel(&major, &minor); |
105 | 110 |
106 // We do not support Win2K or older, or XP without service pack 2. | 111 // We do not support Win2K or older, or XP without service pack 2. |
107 VLOG(1) << "Windows Version: " << version | 112 VLOG(1) << "Windows Version: " << version |
108 << ", Service Pack: " << major << "." << minor; | 113 << ", Service Pack: " << major << "." << minor; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 } | 193 } |
189 return (dll_names_count > 0) && success; | 194 return (dll_names_count > 0) && success; |
190 } | 195 } |
191 | 196 |
192 // This method tries to delete a registry key and logs an error message | 197 // This method tries to delete a registry key and logs an error message |
193 // in case of failure. It returns true if deletion is successful, | 198 // in case of failure. It returns true if deletion is successful, |
194 // otherwise false. | 199 // otherwise false. |
195 bool InstallUtil::DeleteRegistryKey(RegKey& root_key, | 200 bool InstallUtil::DeleteRegistryKey(RegKey& root_key, |
196 const std::wstring& key_path) { | 201 const std::wstring& key_path) { |
197 VLOG(1) << "Deleting registry key " << key_path; | 202 VLOG(1) << "Deleting registry key " << key_path; |
198 if (!root_key.DeleteKey(key_path.c_str()) && | 203 LONG result = root_key.DeleteKey(key_path.c_str()); |
199 ::GetLastError() != ERROR_FILE_NOT_FOUND) { | 204 if (result != ERROR_SUCCESS && result != ERROR_FILE_NOT_FOUND) { |
200 PLOG(ERROR) << "Failed to delete registry key: " << key_path; | 205 PLOG(ERROR) << "Failed to delete registry key: " << key_path |
| 206 << " error: " << result; |
201 return false; | 207 return false; |
202 } | 208 } |
203 return true; | 209 return true; |
204 } | 210 } |
205 | 211 |
206 // This method tries to delete a registry value and logs an error message | 212 // This method tries to delete a registry value and logs an error message |
207 // in case of failure. It returns true if deletion is successful, | 213 // in case of failure. It returns true if deletion is successful, |
208 // otherwise false. | 214 // otherwise false. |
209 bool InstallUtil::DeleteRegistryValue(HKEY reg_root, | 215 bool InstallUtil::DeleteRegistryValue(HKEY reg_root, |
210 const std::wstring& key_path, | 216 const std::wstring& key_path, |
211 const std::wstring& value_name) { | 217 const std::wstring& value_name) { |
212 RegKey key(reg_root, key_path.c_str(), KEY_ALL_ACCESS); | 218 RegKey key(reg_root, key_path.c_str(), KEY_ALL_ACCESS); |
213 VLOG(1) << "Deleting registry value " << value_name; | 219 VLOG(1) << "Deleting registry value " << value_name; |
214 if (key.ValueExists(value_name.c_str()) && | 220 if (key.ValueExists(value_name.c_str())) { |
215 !key.DeleteValue(value_name.c_str())) { | 221 LONG result = key.DeleteValue(value_name.c_str()); |
216 LOG(ERROR) << "Failed to delete registry value: " << value_name; | 222 if (result != ERROR_SUCCESS) { |
217 return false; | 223 LOG(ERROR) << "Failed to delete registry value: " << value_name |
| 224 << " error: " << result; |
| 225 return false; |
| 226 } |
218 } | 227 } |
219 return true; | 228 return true; |
220 } | 229 } |
221 | 230 |
222 // static | 231 // static |
223 int InstallUtil::GetInstallReturnCode(installer::InstallStatus status) { | 232 int InstallUtil::GetInstallReturnCode(installer::InstallStatus status) { |
224 switch (status) { | 233 switch (status) { |
225 case installer::FIRST_INSTALL_SUCCESS: | 234 case installer::FIRST_INSTALL_SUCCESS: |
226 case installer::INSTALL_REPAIRED: | 235 case installer::INSTALL_REPAIRED: |
227 case installer::NEW_VERSION_UPDATED: | 236 case installer::NEW_VERSION_UPDATED: |
228 case installer::IN_USE_UPDATED: | 237 case installer::IN_USE_UPDATED: |
229 return 0; | 238 return 0; |
230 default: | 239 default: |
231 return status; | 240 return status; |
232 } | 241 } |
233 } | 242 } |
OLD | NEW |