Index: chrome/installer/util/helper.cc |
=================================================================== |
--- chrome/installer/util/helper.cc (revision 70232) |
+++ chrome/installer/util/helper.cc (working copy) |
@@ -41,18 +41,38 @@ |
bool IsInstalledAsMulti(bool system_install, BrowserDistribution* dist) { |
bool installed_as_multi = false; |
- HKEY root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
- RegKey key(root, dist->GetStateKey().c_str(), KEY_READ); |
- if (key.Valid()) { |
- std::wstring args; |
- key.ReadValue(installer::kUninstallArgumentsField, &args); |
- if (!args.empty()) { |
- args.insert(0, L"fake.exe "); |
- CommandLine cmd(CommandLine::FromString(args)); |
- installed_as_multi = cmd.HasSwitch(installer::switches::kMultiInstall); |
+ CommandLine cmd(CommandLine::NO_PROGRAM); |
+ if (GetUninstallSwitches(system_install, dist, &cmd)) |
+ installed_as_multi = cmd.HasSwitch(installer::switches::kMultiInstall); |
+ return installed_as_multi; |
+} |
+ |
+bool GetUninstallSwitches(bool system_install, BrowserDistribution* dist, |
+ CommandLine* cmd_line_switches) { |
+ scoped_ptr<Version> installed(InstallUtil::GetChromeVersion(dist, |
+ system_install)); |
+ if (installed.get()) { |
+ HKEY root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
+ RegKey key(root, dist->GetStateKey().c_str(), KEY_READ); |
+ if (key.Valid()) { |
+ std::wstring args; |
+ key.ReadValue(installer::kUninstallArgumentsField, &args); |
+ if (!args.empty()) { |
+ args.insert(0, L"foo.exe "); |
+ *cmd_line_switches = CommandLine::FromString(args); |
+ } else { |
+ LOG(ERROR) << "No uninstallation arguments for " |
+ << dist->GetApplicationName(); |
+ installed.reset(); |
+ } |
+ } else { |
+ LOG(ERROR) << "Product looks to be installed but we can't access the " |
+ "state key: " << dist->GetApplicationName(); |
+ installed.reset(); |
} |
} |
- return installed_as_multi; |
+ |
+ return installed.get() != NULL; |
} |
FilePath GetChromeInstallPath(bool system_install, BrowserDistribution* dist) { |