| // Copyright (c) 2011 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 "chrome/browser/browser_util_win.h" |
| |
| #include <windows.h> |
| |
| #include <algorithm> |
| #include <string> |
| |
| #include "base/base_paths.h" |
| #include "base/file_path.h" |
| #include "base/path_service.h" |
| |
| namespace browser_util { |
| |
| bool IsBrowserAlreadyRunning() { |
| static HANDLE handle = NULL; |
| FilePath exe_path; |
| PathService::Get(base::FILE_EXE, &exe_path); |
| std::wstring exe = exe_path.value(); |
| std::replace(exe.begin(), exe.end(), '\\', '!'); |
| std::transform(exe.begin(), exe.end(), exe.begin(), tolower); |
| exe = L"Global\\" + exe; |
| if (handle != NULL) |
| CloseHandle(handle); |
| handle = CreateEvent(NULL, TRUE, TRUE, exe.c_str()); |
| int error = GetLastError(); |
| return (error == ERROR_ALREADY_EXISTS || error == ERROR_ACCESS_DENIED); |
| } |
| |
| } // namespace browser_util |