diff options
| author | Odd Stranne <odd@mullvad.net> | 2019-12-06 09:30:00 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2019-12-06 18:38:15 +0100 |
| commit | 172aae063b53183b5b3f3e46e42e8daa5c5e72b7 (patch) | |
| tree | c74d657c7ac04ac755019c1d0b9788bbec28da82 | |
| parent | 29308f9b0232768331c232da73bc17d202122a60 (diff) | |
| download | mullvadvpn-172aae063b53183b5b3f3e46e42e8daa5c5e72b7.tar.xz mullvadvpn-172aae063b53183b5b3f3e46e42e8daa5c5e72b7.zip | |
Update configuration on existing service during installation
| -rw-r--r-- | mullvad-daemon/src/system_service.rs | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/mullvad-daemon/src/system_service.rs b/mullvad-daemon/src/system_service.rs index 9dcb56efb3..765f4e66b4 100644 --- a/mullvad-daemon/src/system_service.rs +++ b/mullvad-daemon/src/system_service.rs @@ -13,7 +13,7 @@ use std::{ use talpid_types::ErrorExt; use windows_service::{ service::{ - ServiceAccess, ServiceAction, ServiceActionType, ServiceControl, ServiceControlAccept, + Service, ServiceAccess, ServiceAction, ServiceActionType, ServiceControl, ServiceControlAccept, ServiceDependency, ServiceErrorControl, ServiceExitCode, ServiceFailureActions, ServiceFailureResetPeriod, ServiceInfo, ServiceStartType, ServiceState, ServiceStatus, ServiceType, @@ -30,6 +30,13 @@ static SERVICE_TYPE: ServiceType = ServiceType::OWN_PROCESS; const SERVICE_RECOVERY_LAST_RESTART_DELAY: Duration = Duration::from_secs(60 * 10); const SERVICE_FAILURE_RESET_PERIOD: Duration = Duration::from_secs(60 * 15); +lazy_static::lazy_static! { + static ref SERVICE_ACCESS: ServiceAccess = ServiceAccess::QUERY_CONFIG + | ServiceAccess::CHANGE_CONFIG + | ServiceAccess::START + | ServiceAccess::DELETE; +} + pub fn run() -> Result<(), String> { // Start the service dispatcher. // This will block current thread until the service stopped and spawn `service_main` on a @@ -250,14 +257,10 @@ pub fn install_service() -> Result<(), InstallError> { let manager_access = ServiceManagerAccess::CONNECT | ServiceManagerAccess::CREATE_SERVICE; let service_manager = ServiceManager::local_computer(None::<&str>, manager_access) .map_err(InstallError::ConnectServiceManager)?; - let service_access = ServiceAccess::QUERY_CONFIG - | ServiceAccess::CHANGE_CONFIG - | ServiceAccess::START - | ServiceAccess::DELETE; let service = service_manager - .create_service(get_service_info(), service_access) - .or(service_manager.open_service(SERVICE_NAME, service_access)) + .create_service(&get_service_info(), *SERVICE_ACCESS) + .or(open_update_service(&service_manager)) .map_err(InstallError::CreateService)?; let recovery_actions = vec