Chromium Code Reviews| Index: remoting/host/elevated_controller_win.cc |
| diff --git a/remoting/host/elevated_controller_win.cc b/remoting/host/elevated_controller_win.cc |
| index 1c13ffab4c56329b7fa320a313fd7a9762b2ee2b..ca2eaa0aee9e39b4eefafd82fd432cb9583b8f2f 100644 |
| --- a/remoting/host/elevated_controller_win.cc |
| +++ b/remoting/host/elevated_controller_win.cc |
| @@ -227,6 +227,26 @@ STDMETHODIMP ElevatedControllerWin::StartDaemon() { |
| return hr; |
| } |
| + // Change the service start type to 'auto'. |
| + if (!::ChangeServiceConfigW(service, |
| + SERVICE_WIN32_OWN_PROCESS, |
|
Wez
2012/04/10 21:26:20
nit: Use SERVICE_NO_CHANGE here, so the installer
alexeypa (please no reviews)
2012/04/10 22:18:16
Done.
|
| + SERVICE_AUTO_START, |
| + SERVICE_NO_CHANGE, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL)) { |
| + DWORD error = GetLastError(); |
| + LOG_GETLASTERROR(ERROR) |
| + << "Failed to change the '" << kWindowsServiceName |
| + << "'service start type to 'auto'"; |
| + return HRESULT_FROM_WIN32(error); |
| + } |
| + |
| + // Start the service. |
| if (!StartService(service, 0, NULL)) { |
| DWORD error = GetLastError(); |
| if (error != ERROR_SERVICE_ALREADY_RUNNING) { |
| @@ -247,6 +267,26 @@ STDMETHODIMP ElevatedControllerWin::StopDaemon() { |
| return hr; |
| } |
| + // Change the service start type to 'manual'. |
| + if (!::ChangeServiceConfigW(service, |
| + SERVICE_WIN32_OWN_PROCESS, |
|
Wez
2012/04/10 21:26:20
nit: Same here.
alexeypa (please no reviews)
2012/04/10 22:18:16
Done.
|
| + SERVICE_DEMAND_START, |
| + SERVICE_NO_CHANGE, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL, |
| + NULL)) { |
| + DWORD error = GetLastError(); |
| + LOG_GETLASTERROR(ERROR) |
| + << "Failed to change the '" << kWindowsServiceName |
| + << "'service start type to 'manual'"; |
| + return HRESULT_FROM_WIN32(error); |
| + } |
| + |
| + // Stop the service. |
| SERVICE_STATUS status; |
| if (!ControlService(service, SERVICE_CONTROL_STOP, &status)) { |
| DWORD error = GetLastError(); |
| @@ -278,9 +318,11 @@ HRESULT ElevatedControllerWin::OpenService(ScopedScHandle* service_out) { |
| return HRESULT_FROM_WIN32(error); |
| } |
| + DWORD desired_access = SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | |
| + SERVICE_START | SERVICE_STOP; |
| ScopedScHandle service( |
| ::OpenServiceW(scmanager, UTF8ToUTF16(kWindowsServiceName).c_str(), |
| - SERVICE_QUERY_STATUS | SERVICE_START | SERVICE_STOP)); |
| + desired_access)); |
| if (!service.IsValid()) { |
| error = GetLastError(); |
| LOG_GETLASTERROR(ERROR) |