OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include <windows.h> | 5 #include <windows.h> |
6 #include <setupapi.h> // Must be included after windows.h | 6 #include <setupapi.h> // Must be included after windows.h |
7 #include <winspool.h> | 7 #include <winspool.h> |
8 #include <iomanip> | 8 #include <iomanip> |
9 | 9 |
10 #include "base/at_exit.h" | 10 #include "base/at_exit.h" |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 if (!install) { | 131 if (!install) { |
132 command_line.AppendArg("/u"); | 132 command_line.AppendArg("/u"); |
133 } | 133 } |
134 | 134 |
135 // Use system32 path here because otherwise ::AddMonitor would fail. | 135 // Use system32 path here because otherwise ::AddMonitor would fail. |
136 command_line.AppendArgPath(GetSystemPath(GetPortMonitorDllName())); | 136 command_line.AppendArgPath(GetSystemPath(GetPortMonitorDllName())); |
137 | 137 |
138 base::LaunchOptions options; | 138 base::LaunchOptions options; |
139 options.wait = true; | 139 options.wait = true; |
140 | 140 |
141 base::win::ScopedHandle regsvr32_handle; | 141 base::Process regsvr32_process = |
142 if (!base::LaunchProcess(command_line.GetCommandLineString(), options, | 142 base::LaunchProcess(command_line.GetCommandLineString(), options); |
143 ®svr32_handle)) { | 143 if (!regsvr32_process.IsValid()) { |
144 LOG(ERROR) << "Unable to launch regsvr32.exe."; | 144 LOG(ERROR) << "Unable to launch regsvr32.exe."; |
145 return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); | 145 return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); |
146 } | 146 } |
147 | 147 |
148 DWORD exit_code = S_OK; | 148 DWORD exit_code = S_OK; |
149 if (install) { | 149 if (install) { |
150 if (!GetExitCodeProcess(regsvr32_handle.Get(), &exit_code)) { | 150 if (!GetExitCodeProcess(regsvr32_process.Handle(), &exit_code)) { |
151 LOG(ERROR) << "Unable to get regsvr32.exe exit code."; | 151 LOG(ERROR) << "Unable to get regsvr32.exe exit code."; |
152 return GetLastHResult(); | 152 return GetLastHResult(); |
153 } | 153 } |
154 if (exit_code != 0) { | 154 if (exit_code != 0) { |
155 LOG(ERROR) << "Regsvr32.exe failed with " << exit_code; | 155 LOG(ERROR) << "Regsvr32.exe failed with " << exit_code; |
156 return HRESULT_FROM_WIN32(exit_code); | 156 return HRESULT_FROM_WIN32(exit_code); |
157 } | 157 } |
158 } else { | 158 } else { |
159 if (!base::DeleteFile(target_path, false)) { | 159 if (!base::DeleteFile(target_path, false)) { |
160 SpoolerServiceCommand("stop"); | 160 SpoolerServiceCommand("stop"); |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
551 | 551 |
552 VLOG(0) << GetErrorMessage(retval) | 552 VLOG(0) << GetErrorMessage(retval) |
553 << " HRESULT=0x" << std::setbase(16) << retval; | 553 << " HRESULT=0x" << std::setbase(16) << retval; |
554 | 554 |
555 // Installer is silent by default as required by Google Update. | 555 // Installer is silent by default as required by Google Update. |
556 if (base::CommandLine::ForCurrentProcess()->HasSwitch("verbose")) { | 556 if (base::CommandLine::ForCurrentProcess()->HasSwitch("verbose")) { |
557 DisplayWindowsMessage(NULL, retval, LoadLocalString(IDS_DRIVER_NAME)); | 557 DisplayWindowsMessage(NULL, retval, LoadLocalString(IDS_DRIVER_NAME)); |
558 } | 558 } |
559 return retval; | 559 return retval; |
560 } | 560 } |
OLD | NEW |