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)); } }
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) )); } }