Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: chrome/installer/util/install_util.cc

Issue 6490008: Fix user-to-system-level installation delegation. This looks to have been bro... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/installer/util/install_util.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // See the corresponding header file for description of the functions in this 5 // See the corresponding header file for description of the functions in this
6 // file. 6 // file.
7 7
8 #include "chrome/installer/util/install_util.h" 8 #include "chrome/installer/util/install_util.h"
9 9
10 #include <shellapi.h> 10 #include <shellapi.h>
11 #include <shlobj.h> 11 #include <shlobj.h>
12 12
13 #include <algorithm> 13 #include <algorithm>
14 14
15 #include "base/command_line.h" 15 #include "base/command_line.h"
16 #include "base/file_util.h" 16 #include "base/file_util.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/path_service.h" 18 #include "base/path_service.h"
19 #include "base/scoped_ptr.h" 19 #include "base/scoped_ptr.h"
20 #include "base/string_util.h" 20 #include "base/string_util.h"
21 #include "base/values.h" 21 #include "base/values.h"
22 #include "base/version.h" 22 #include "base/version.h"
23 #include "base/win/registry.h" 23 #include "base/win/registry.h"
24 #include "base/win/windows_version.h" 24 #include "base/win/windows_version.h"
25 #include "chrome/common/json_value_serializer.h" 25 #include "chrome/common/json_value_serializer.h"
26 #include "chrome/installer/util/browser_distribution.h" 26 #include "chrome/installer/util/browser_distribution.h"
27 #include "chrome/installer/util/google_update_constants.h" 27 #include "chrome/installer/util/google_update_constants.h"
28 #include "chrome/installer/util/l10n_string_util.h" 28 #include "chrome/installer/util/l10n_string_util.h"
29 #include "chrome/installer/util/installation_state.h"
29 #include "chrome/installer/util/util_constants.h" 30 #include "chrome/installer/util/util_constants.h"
30 #include "chrome/installer/util/work_item_list.h" 31 #include "chrome/installer/util/work_item_list.h"
31 32
32 using base::win::RegKey; 33 using base::win::RegKey;
34 using installer::ProductState;
33 35
34 bool InstallUtil::ExecuteExeAsAdmin(const CommandLine& cmd, DWORD* exit_code) { 36 bool InstallUtil::ExecuteExeAsAdmin(const CommandLine& cmd, DWORD* exit_code) {
35 FilePath::StringType program(cmd.GetProgram().value()); 37 FilePath::StringType program(cmd.GetProgram().value());
36 DCHECK(!program.empty()); 38 DCHECK(!program.empty());
37 DCHECK_NE(program[0], L'\"'); 39 DCHECK_NE(program[0], L'\"');
38 40
39 CommandLine::StringType params(cmd.command_line_string()); 41 CommandLine::StringType params(cmd.command_line_string());
40 if (params[0] == '"') { 42 if (params[0] == '"') {
41 DCHECK_EQ('"', params[program.length() + 1]); 43 DCHECK_EQ('"', params[program.length() + 1]);
42 DCHECK_EQ(program, params.substr(1, program.length())); 44 DCHECK_EQ(program, params.substr(1, program.length()));
(...skipping 18 matching lines...) Expand all
61 ::WaitForSingleObject(info.hProcess, INFINITE); 63 ::WaitForSingleObject(info.hProcess, INFINITE);
62 DWORD ret_val = 0; 64 DWORD ret_val = 0;
63 if (!::GetExitCodeProcess(info.hProcess, &ret_val)) 65 if (!::GetExitCodeProcess(info.hProcess, &ret_val))
64 return false; 66 return false;
65 67
66 if (exit_code) 68 if (exit_code)
67 *exit_code = ret_val; 69 *exit_code = ret_val;
68 return true; 70 return true;
69 } 71 }
70 72
71 std::wstring InstallUtil::GetChromeUninstallCmd(bool system_install, 73 CommandLine InstallUtil::GetChromeUninstallCmd(
72 BrowserDistribution* dist) { 74 bool system_install, BrowserDistribution::Type distribution_type) {
73 DCHECK(dist); 75 ProductState state;
tommi (sloooow) - chröme 2011/02/10 20:52:37 With this, now Chrome depends on the ProductState
robertshield 2011/02/10 21:09:39 We could, but I'm not sure that's the best way to
74 HKEY root = system_install ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 76 if (state.Initialize(system_install, distribution_type)) {
75 RegKey key(root, dist->GetUninstallRegPath().c_str(), KEY_READ); 77 return state.uninstall_command();
76 std::wstring uninstall_cmd; 78 }
77 key.ReadValue(installer::kUninstallStringField, &uninstall_cmd); 79 return CommandLine(CommandLine::NO_PROGRAM);
78 return uninstall_cmd;
79 } 80 }
80 81
81 Version* InstallUtil::GetChromeVersion(BrowserDistribution* dist, 82 Version* InstallUtil::GetChromeVersion(BrowserDistribution* dist,
82 bool system_install) { 83 bool system_install) {
83 DCHECK(dist); 84 DCHECK(dist);
84 RegKey key; 85 RegKey key;
85 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 86 HKEY reg_root = (system_install) ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
86 LONG result = key.Open(reg_root, dist->GetVersionKey().c_str(), KEY_READ); 87 LONG result = key.Open(reg_root, dist->GetVersionKey().c_str(), KEY_READ);
87 88
88 std::wstring version_str; 89 std::wstring version_str;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 std::wstring command; 256 std::wstring command;
256 command.append(1, L'"') 257 command.append(1, L'"')
257 .append(no_program ? L"" : exe_path) 258 .append(no_program ? L"" : exe_path)
258 .append(L"\" ") 259 .append(L"\" ")
259 .append(arguments); 260 .append(arguments);
260 261
261 // If we have a program name, return this complete command line. 262 // If we have a program name, return this complete command line.
262 *command_line = CommandLine::FromString(command); 263 *command_line = CommandLine::FromString(command);
263 } 264 }
264 } 265 }
OLDNEW
« no previous file with comments | « chrome/installer/util/install_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698