Esempio n. 1
0
        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);
         }
     }
 }