123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright 2018 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 "base/at_exit.h"
- #include "base/command_line.h"
- #include "base/logging.h"
- #include "base/process/memory.h"
- #include "base/win/process_startup_helper.h"
- #include "base/win/scoped_com_initializer.h"
- #include "chrome/elevation_service/service_main.h"
- #include "chrome/install_static/product_install_details.h"
- extern "C" int WINAPI wWinMain(HINSTANCE instance,
- HINSTANCE prev_instance,
- wchar_t* command_line,
- int show_command) {
- // Initialize the CommandLine singleton from the environment.
- base::CommandLine::Init(0, nullptr);
- logging::LoggingSettings settings;
- settings.logging_dest =
- logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR;
- logging::InitLogging(settings);
- // The exit manager is in charge of calling the dtors of singletons.
- base::AtExitManager exit_manager;
- install_static::InitializeProductDetailsForPrimaryModule();
- // Make sure the process exits cleanly on unexpected errors.
- base::EnableTerminationOnHeapCorruption();
- base::EnableTerminationOnOutOfMemory();
- base::win::RegisterInvalidParamHandler();
- base::win::SetupCRT(*base::CommandLine::ForCurrentProcess());
- // Initialize COM for the current thread.
- base::win::ScopedCOMInitializer com_initializer(
- base::win::ScopedCOMInitializer::kMTA);
- if (!com_initializer.Succeeded()) {
- PLOG(ERROR) << "Failed to initialize COM";
- return -1;
- }
- // Run the COM service.
- elevation_service::ServiceMain* service =
- elevation_service::ServiceMain::GetInstance();
- if (!service->InitWithCommandLine(base::CommandLine::ForCurrentProcess()))
- return -1;
- return service->Start();
- }
|