15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_util_win.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_paths.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_util { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsBrowserAlreadyRunning() { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static HANDLE handle = NULL; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath exe_path; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::FILE_EXE, &exe_path); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring exe = exe_path.value(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::replace(exe.begin(), exe.end(), '\\', '!'); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::transform(exe.begin(), exe.end(), exe.begin(), tolower); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exe = L"Global\\" + exe; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (handle != NULL) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseHandle(handle); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle = CreateEvent(NULL, TRUE, TRUE, exe.c_str()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int error = GetLastError(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (error == ERROR_ALREADY_EXISTS || error == ERROR_ACCESS_DENIED); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace browser_util 34