예제 #1
0
        public WatcherResult Watch()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(ServiceName))
                {
                    throw new Exception("ServiceName is incorrect ! NULL or EMPTY");
                }

                var status = WinServiceUtilities.GetServiceStatus(ServiceName);

                bool notify = false;

                if (!_serviceStatus.HasValue || status != _serviceStatus.Value)
                {
                    _serviceStatus = status;
                    if (AnyStatus)
                    {
                        notify = true;
                    }
                    else if ((int)status == Status)
                    {
                        notify = true;
                    }
                }

                if (!notify)
                {
                    return(WatcherResult.NotFound);
                }
                _serviceStatus = status;
                return(WatcherResult.Succeed(ArgumentCollection.New()
                                             .WithArgument(WinServiceWatcherResultArgs.ServiceName, ServiceName)
                                             .WithArgument(WinServiceWatcherResultArgs.Status, status.ToString("G"))));
            }
            catch (Exception exception)
            {
                LoggingService.Error(exception);
                return(WatcherResult.NotFound
                       .WithException(exception));
            }
        }
예제 #2
0
        public ActionResult Execute(ArgumentCollection arguments)
        {
            string serviceName = null;

            try
            {
                if (arguments.HasArgument(WinServiceActionExecutionArgs.ServiceName))
                {
                    serviceName = arguments.GetValue <string>(WinServiceActionExecutionArgs.ServiceName);
                }

                if (serviceName == null && !string.IsNullOrWhiteSpace(ServiceName))
                {
                    serviceName = ServiceName;
                }

                if (string.IsNullOrWhiteSpace(serviceName))
                {
                    throw new Exception($"Missing Argument {WinServiceActionInstanceArgs.ServiceName}");
                }

                if (!TryGetTargetStatus(out ServiceTargetStatus status))
                {
                    throw new Exception($"Unexpected Target Status Value ({Status}) Expected valid casting from ({typeof(ServiceTargetStatus)})");
                }

                bool result = false;
                switch (status)
                {
                case ServiceTargetStatus.Start:
                {
                    result = WinServiceUtilities.StartService(serviceName, Wait, WaitTimeout);
                    break;
                }

                case ServiceTargetStatus.Stop:
                {
                    result = WinServiceUtilities.StopService(serviceName, Wait, WaitTimeout);
                    break;
                }

                case ServiceTargetStatus.Pause:
                {
                    result = WinServiceUtilities.PauseService(serviceName, Wait, WaitTimeout);
                    break;
                }

                case ServiceTargetStatus.Resume:
                {
                    result = WinServiceUtilities.ResumeService(serviceName, Wait, WaitTimeout);
                    break;
                }

                default:
                {
                    throw new Exception("Unexpected ControlStatus when switching Control cases");
                }
                }


                return(result
                    ? ActionResult.Succeeded().WithAdditionInformation(ArgumentCollection.New()
                                                                       .WithArgument(WinServiceActionResultsArgs.ServiceName, serviceName)
                                                                       .WithArgument(WinServiceActionResultsArgs.ActionTargetStatus, Status)
                                                                       )
                    : ActionResult.Failed().WithAdditionInformation(ArgumentCollection.New()
                                                                    .WithArgument(WinServiceActionResultsArgs.ServiceName, serviceName)
                                                                    .WithArgument(WinServiceActionResultsArgs.ActionTargetStatus, Status)
                                                                    ));
            }
            catch (Exception exception)
            {
                LoggingService.Error(exception);
                return(ActionResult.Failed(exception).WithAdditionInformation(ArgumentCollection.New()
                                                                              .WithArgument(WinServiceActionResultsArgs.ServiceName, serviceName)
                                                                              .WithArgument(WinServiceActionResultsArgs.ActionTargetStatus, Status)
                                                                              ));
            }
        }