private async Task <IEnumerable <Service> > GetServicesFromSystem() { var services = ServiceController.GetServices() .Select(service => new Service() { Name = service.DisplayName, MachineName = service.ServiceName, Status = ServiceStatusMapper.FromServiceControllerStatus(service.Status) }); services = await _descriptionService.SetDescription(services); _cachedServices = services; return(services); }
public async Task <ServiceStatus> StartService(string serviceName) { var currentStatus = await _statusService.GetStatus(serviceName); if (currentStatus == ServiceStatus.Running) { return(currentStatus); } using (ServiceController sc = new ServiceController(serviceName)) { try { //TODO: Abstract this code to be more reusable. (Delegate?) if (currentStatus == ServiceStatus.Paused) { sc.Continue(); } else { sc.Start(); } sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 30)); } catch (InvalidOperationException ex) { return(ex.InnerException.Message == AccessDeniedText ? ServiceStatus.NoAccess : ServiceStatus.NotExists); } catch (System.ComponentModel.Win32Exception) { return(ServiceStatus.NoAccess); } //If any other exceptions occur, we dont know what happened. catch (Exception) { return(ServiceStatus.Unknown); } return(ServiceStatusMapper.FromServiceControllerStatus(sc.Status)); } }
public async Task <ServiceStatus> GetStatus(string serviceName) { using (ServiceController sc = new ServiceController(serviceName)) { try { var status = ServiceStatusMapper.FromServiceControllerStatus(sc.Status); return(await Task.FromResult(status)); } catch (InvalidOperationException) { return(ServiceStatus.NotExists); } catch (System.ComponentModel.Win32Exception) { return(ServiceStatus.NoAccess); } //If any other exceptions occur, we don't know what happened. catch (Exception) { return(ServiceStatus.Unknown); } } }