blob: 5592f06e8c3a400ce6dcb9950b1d00d6635c69be [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <windows.h>
#include "apps/app_host/binaries_installer.h"
#include "apps/app_host/update.h"
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/process/launch.h"
#include "chrome/installer/launcher_support/chrome_launcher_support.h"
int APIENTRY wWinMain(HINSTANCE, HINSTANCE, wchar_t*, int) {
base::AtExitManager exit_manager;
// Initialize the commandline singleton from the environment.
CommandLine::Init(0, NULL);
base::FilePath chrome_exe(chrome_launcher_support::GetAnyChromePath());
if (chrome_exe.empty()) {
LOG(INFO) << "No Chrome executable could be found. Let's install it.";
HRESULT hr = app_host::InstallBinaries();
if (FAILED(hr)) {
LOG(ERROR) << "Failed to install the Chrome Binaries. Error: " << hr;
return 1;
} else {
chrome_exe = chrome_launcher_support::GetAnyChromePath();
if (chrome_exe.empty()) {
LOG(ERROR) << "Failed to find the Chrome Binaries despite a "
<< "'successful' installation.";
return 1;
}
}
}
CommandLine chrome_exe_command_line(chrome_exe);
chrome_exe_command_line.AppendArguments(
*CommandLine::ForCurrentProcess(), false);
// Launch Chrome before checking for update, for faster user experience.
bool launch_result = base::LaunchProcess(chrome_exe_command_line,
base::LaunchOptions(), NULL);
if (launch_result)
LOG(INFO) << "Delegated to Chrome executable at " << chrome_exe.value();
else
LOG(INFO) << "Failed to launch Chrome executable at " << chrome_exe.value();
app_host::EnsureAppHostUpToDate();
return !launch_result;
}