public WatchFolderServiceViewModel(SettingsServiceClient client)
 {
     _client = client;
     _selectedWatchFolderSettings = null;
     AddWatchFolderCommand        = new DelegateCommand(AddWatchFolder, CanAddWatchFolder);
     RemoveWatchFolderCommand     = new DelegateCommand(RemoveWatchFolder, CanRemoveWatchFolder);
     EditWatchFolderCommand       = new DelegateCommand(EditWatchFolder, CanEditWatchFolder);
 }
        public MainWindow()
        {
            InitializeComponent();

            try
            {
                EventQuery eventQuery = new EventQuery();
                eventQuery.QueryString = string.Format("SELECT * FROM __InstanceModificationEvent within 2 WHERE targetinstance isa 'Win32_Service' and targetinstance.name = '{0}'", ServiceName);
                EventWatcher = new ManagementEventWatcher(eventQuery);
                EventWatcher.Options.Timeout = new TimeSpan(1, 0, 0);
                EventWatcher.EventArrived += new EventArrivedEventHandler(eventWatcher_EventArrived);
                EventWatcher.Start();

                ServiceController = new ServiceController();
                ServiceController.ServiceName = ServiceName;

                lblServiceStatus.Content = ServiceController.Status.ToString();

                if (ServiceController.Status == ServiceControllerStatus.Running)
                {
                    WindowsServiceReference = new SettingsServiceClient();
                    lblCurrentOutputMessage.Content = WindowsServiceReference.GetOutputMessage();
                }

                changeBtnState();
            }
            catch (Exception ex)
            {
                lblError.Content = ex.Message;

                btnStartService.IsEnabled = false;
                btnStopService.IsEnabled = false;
                btnRestartService.IsEnabled = false;
                txtNewOutputMessage.IsEnabled = false;
                btnChangeOutputMessage.IsEnabled = false;
            }
        }
        void eventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            ManagementBaseObject targetInstance = ((ManagementBaseObject)e.NewEvent["targetinstance"]);
            PropertyData state = targetInstance.Properties["state"];

            this.Dispatcher.Invoke((Action)(() =>
            {
                lblServiceStatus.Content = state.Value.ToString();
                btnStartService.IsEnabled = state.Value.ToString() == ServiceControllerStatus.Stopped.ToString();
                btnStopService.IsEnabled = state.Value.ToString() == ServiceControllerStatus.Running.ToString();
                btnRestartService.IsEnabled = state.Value.ToString() == ServiceControllerStatus.Running.ToString();
                txtNewOutputMessage.IsEnabled = state.Value.ToString() == ServiceControllerStatus.Running.ToString();
                btnChangeOutputMessage.IsEnabled = state.Value.ToString() == ServiceControllerStatus.Running.ToString();

                if (state.Value.ToString() == ServiceControllerStatus.Running.ToString())
                {
                    WindowsServiceReference = new SettingsServiceClient();
                    lblCurrentOutputMessage.Content = WindowsServiceReference.GetOutputMessage();

                    ServiceController = new ServiceController();
                    ServiceController.ServiceName = ServiceName;
                }
                else
                {
                    lblCurrentOutputMessage.Content = string.Empty;
                }
            }));
        }
 private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
 {
     e.Result = new FindServiceResult {
         EndpointAddresses = SettingsServiceClient.FindService().ToList()
     };
 }