Index: chrome/installer/setup/install_worker.cc |
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc |
index 245abc4f53cf4e3b9ec25cfd5a03f91e822e88cc..7d774e2352dd0750509d1a3928d4192eb7e0b49c 100644 |
--- a/chrome/installer/setup/install_worker.cc |
+++ b/chrome/installer/setup/install_worker.cc |
@@ -168,6 +168,15 @@ void AddInstallerCopyTasks(const InstallerState& installer_state, |
temp_path.value(), WorkItem::ALWAYS); |
} |
+ if (installer_state.RequiresActiveSetup()) { |
+ // Make a copy of setup.exe with a different name so that Active Setup |
+ // doesn't require an admin on XP thanks to Application Compatibility. |
+ FilePath active_setup_exe(installer_dir.Append(kActiveSetupExe)); |
+ install_list->AddCopyTreeWorkItem( |
+ setup_path.value(), active_setup_exe.value(), temp_path.value(), |
+ WorkItem::ALWAYS); |
+ } |
+ |
// If only the App Host (not even the Chrome Binaries) is being installed, |
// this must be a user-level App Host piggybacking on system-level Chrome |
// Binaries. Only setup.exe is required, and only for uninstall. |
@@ -1400,6 +1409,7 @@ void AddActiveSetupWorkItems(const InstallerState& installer_state, |
<< "-level " << distribution->GetAppShortCutName(); |
return; |
} |
+ DCHECK(installer_state.RequiresActiveSetup()); |
const HKEY root = HKEY_LOCAL_MACHINE; |
const string16 active_setup_path( |
@@ -1410,8 +1420,9 @@ void AddActiveSetupWorkItems(const InstallerState& installer_state, |
list->AddSetRegValueWorkItem(root, active_setup_path, L"", |
distribution->GetAppShortCutName(), true); |
- CommandLine cmd(installer_state.GetInstallerDirectory(new_version). |
- Append(setup_path.BaseName())); |
+ FilePath active_setup_exe(installer_state.GetInstallerDirectory(new_version) |
+ .Append(kActiveSetupExe)); |
+ CommandLine cmd(active_setup_exe); |
cmd.AppendSwitch(installer::switches::kConfigureUserSettings); |
cmd.AppendSwitch(installer::switches::kVerboseLogging); |
cmd.AppendSwitch(installer::switches::kSystemLevel); |