Chromium Code Reviews| 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 #include <windows.h> | 5 #include <windows.h> |
| 6 #include <msi.h> | 6 #include <msi.h> |
| 7 #include <shellapi.h> | 7 #include <shellapi.h> |
| 8 #include <shlobj.h> | 8 #include <shlobj.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 486 IDS_INSTALL_MULTI_INSTALLATION_EXISTS_BASE, NULL); | 486 IDS_INSTALL_MULTI_INSTALLATION_EXISTS_BASE, NULL); |
| 487 return false; | 487 return false; |
| 488 } | 488 } |
| 489 } | 489 } |
| 490 | 490 |
| 491 // Check to avoid attempting to lay down a user-level installation on top | 491 // Check to avoid attempting to lay down a user-level installation on top |
| 492 // of a system-level one. | 492 // of a system-level one. |
| 493 const ProductState* other_state = | 493 const ProductState* other_state = |
| 494 original_state.GetProductState(!system_level, browser_dist->GetType()); | 494 original_state.GetProductState(!system_level, browser_dist->GetType()); |
| 495 if (other_state != NULL && !system_level) { | 495 if (other_state != NULL && !system_level) { |
| 496 LOG(ERROR) << "Already installed version " | 496 if (is_first_install) { |
| 497 << other_state->version().GetString() | 497 // This is a user-level install and there is a system-level install of |
| 498 << " conflicts with the current install mode."; | 498 // the product. |
| 499 if (is_first_install && product->is_chrome()) { | 499 LOG(ERROR) << "Already installed version " |
| 500 // This is user-level install and there is a system-level chrome | 500 << other_state->version().GetString() |
| 501 // installation. Instruct Google Update to launch the existing one. | 501 << " at system-level conflicts with this one at user-level."; |
| 502 // There should be no error dialog. | 502 if (product->is_chrome()) { |
| 503 FilePath chrome_exe(installer::GetChromeInstallPath(!system_level, | 503 // Instruct Google Update to launch the existing system-level Chrome. |
| 504 browser_dist)); | 504 // There should be no error dialog. |
| 505 if (chrome_exe.empty()) { | 505 FilePath chrome_exe(installer::GetChromeInstallPath(!system_level, |
| 506 // If we failed to construct install path. Give up. | 506 browser_dist)); |
| 507 *status = installer::OS_ERROR; | 507 if (chrome_exe.empty()) { |
| 508 installer_state->WriteInstallerResult(*status, | 508 // If we failed to construct install path. Give up. |
| 509 IDS_INSTALL_OS_ERROR_BASE, NULL); | 509 *status = installer::OS_ERROR; |
| 510 } else { | 510 installer_state->WriteInstallerResult(*status, |
| 511 *status = installer::EXISTING_VERSION_LAUNCHED; | 511 IDS_INSTALL_OS_ERROR_BASE, NULL); |
| 512 chrome_exe = chrome_exe.Append(installer::kChromeExe); | 512 } else { |
| 513 CommandLine cmd(chrome_exe); | 513 *status = installer::EXISTING_VERSION_LAUNCHED; |
| 514 cmd.AppendSwitch(switches::kFirstRun); | 514 chrome_exe = chrome_exe.Append(installer::kChromeExe); |
| 515 installer_state->WriteInstallerResult(*status, 0, NULL); | 515 CommandLine cmd(chrome_exe); |
| 516 VLOG(1) << "Launching existing system-level chrome instead."; | 516 cmd.AppendSwitch(switches::kFirstRun); |
| 517 base::LaunchProcess(cmd, base::LaunchOptions(), NULL); | 517 installer_state->WriteInstallerResult(*status, 0, NULL); |
| 518 VLOG(1) << "Launching existing system-level chrome instead."; | |
| 519 base::LaunchProcess(cmd, base::LaunchOptions(), NULL); | |
| 520 } | |
| 521 return false; | |
| 518 } | 522 } |
| 523 // Display an error message for Chrome Frame. | |
|
robertshield
2011/11/15 18:58:27
Wrap lines 523 - 526 in an else block and deleting
| |
| 524 *status = installer::SYSTEM_LEVEL_INSTALL_EXISTS; | |
| 525 installer_state->WriteInstallerResult(*status, | |
| 526 IDS_INSTALL_SYSTEM_LEVEL_EXISTS_BASE, NULL); | |
| 519 return false; | 527 return false; |
| 520 } | 528 } |
| 521 | 529 // This is an update, not a new install. Allow it to take place so that |
| 522 // This is an update, not an install. Omaha should know the difference | 530 // out-of-date versions are not left around. |
| 523 // and not show a dialog. | |
| 524 *status = installer::SYSTEM_LEVEL_INSTALL_EXISTS; | |
| 525 installer_state->WriteInstallerResult(*status, | |
| 526 IDS_INSTALL_SYSTEM_LEVEL_EXISTS_BASE, NULL); | |
| 527 return false; | |
| 528 } | 531 } |
| 529 } | 532 } |
| 530 | 533 |
| 531 // If no previous installation of Chrome, make sure installation directory | 534 // If no previous installation of Chrome, make sure installation directory |
| 532 // either does not exist or can be deleted (i.e. is not locked by some other | 535 // either does not exist or can be deleted (i.e. is not locked by some other |
| 533 // process). | 536 // process). |
| 534 if (is_first_install) { | 537 if (is_first_install) { |
| 535 if (file_util::PathExists(installer_state->target_path()) && | 538 if (file_util::PathExists(installer_state->target_path()) && |
| 536 !file_util::Delete(installer_state->target_path(), true)) { | 539 !file_util::Delete(installer_state->target_path(), true)) { |
| 537 LOG(ERROR) << "Installation directory " | 540 LOG(ERROR) << "Installation directory " |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1337 if (!(installer_state.is_msi() && is_uninstall)) | 1340 if (!(installer_state.is_msi() && is_uninstall)) |
| 1338 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT | 1341 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT |
| 1339 // to pass through, since this is only returned on uninstall which is | 1342 // to pass through, since this is only returned on uninstall which is |
| 1340 // never invoked directly by Google Update. | 1343 // never invoked directly by Google Update. |
| 1341 return_code = InstallUtil::GetInstallReturnCode(install_status); | 1344 return_code = InstallUtil::GetInstallReturnCode(install_status); |
| 1342 | 1345 |
| 1343 VLOG(1) << "Installation complete, returning: " << return_code; | 1346 VLOG(1) << "Installation complete, returning: " << return_code; |
| 1344 | 1347 |
| 1345 return return_code; | 1348 return return_code; |
| 1346 } | 1349 } |
| OLD | NEW |