public override void PostSync(DeploymentSyncContext syncContext)
        {
            var provider = syncContext.DestinationObject;

            if (provider.Name == "MSDeploy." + ServicePathProvider.ObjectName &&
                !ServicePathHelper.IsAbsolutePhysicalPath(provider.ProviderContext.Path))
            {
                var serviceName = ServicePathHelper.GetServiceName(provider.ProviderContext.Path);

                var serviceController = new ServiceController(serviceName);

                if (serviceController.Status == ServiceControllerStatus.Stopped)
                {
                    syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(TraceLevel.Info, Resources.StartingServiceEvent, serviceName));

                    if (!syncContext.WhatIf)
                        serviceController.Start();
                }

                if (!syncContext.WhatIf)
                {
                    int serviceTimeoutSeconds = provider.ProviderContext.ProviderOptions.ProviderSettings.GetValueOrDefault("serviceTimeout", 20);
                    serviceController.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(serviceTimeoutSeconds));
                }
            }

            base.PostSync(syncContext);
        }
Example #2
0
        public override void PostSync(DeploymentSyncContext syncContext)
        {
            var provider = syncContext.DestinationObject;

            if (provider.Name == "MSDeploy." + ServicePathProvider.ObjectName &&
                !ServicePathHelper.IsAbsolutePhysicalPath(provider.ProviderContext.Path))
            {
                var serviceName = ServicePathHelper.GetServiceName(provider.ProviderContext.Path);

                var serviceController = new ServiceController(serviceName);

                if (serviceController.Status == ServiceControllerStatus.Stopped)
                {
                    syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(TraceLevel.Info, Resources.StartingServiceEvent, serviceName));

                    if (!syncContext.WhatIf)
                    {
                        serviceController.Start();
                    }
                }

                if (!syncContext.WhatIf)
                {
                    int serviceTimeoutSeconds = provider.ProviderContext.ProviderOptions.ProviderSettings.GetValueOrDefault("serviceTimeout", 20);
                    serviceController.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(serviceTimeoutSeconds));
                }
            }

            base.PostSync(syncContext);
        }
        public override void Update(DeploymentSyncContext syncContext, DeploymentObject destinationObject, ref DeploymentObject sourceObject, ref bool proceed)
        {
            if (IsServiceStateProvider(destinationObject))
            {
                syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(
                    Resources.SkipServiceStateEvent, "Update", destinationObject.AbsolutePath));

                proceed = false;
            }
        }
        public override void Delete(DeploymentSyncContext syncContext, DeploymentObject destinationObject, DeploymentObject sourceParentObject, ref bool proceed)
        {
            if (IsServiceStateProvider(destinationObject))
            {
                syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(
                                                                    Resources.SkipServiceStateEvent, "Delete", destinationObject.AbsolutePath));

                proceed = false;
            }
        }
        void StopService(DeploymentSyncContext syncContext)
        {
            if (_hasStoppedService)
            {
                return;
            }

            _hasStoppedService = true;

            var provider = syncContext.DestinationObject;

            if (provider.Name == "MSDeploy." + ServicePathProvider.ObjectName &&
                !ServicePathHelper.IsAbsolutePhysicalPath(provider.ProviderContext.Path))
            {
                var serviceName = ServicePathHelper.GetServiceName(provider.ProviderContext.Path);

                var serviceController = new ServiceController(serviceName);

                if (serviceController.Status == ServiceControllerStatus.Running ||
                    serviceController.Status == ServiceControllerStatus.Paused)
                {
                    syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(TraceLevel.Info, Resources.StoppingServiceEvent, serviceName));

                    if (!syncContext.WhatIf)
                    {
                        serviceController.Stop();
                    }
                }

                if (!syncContext.WhatIf)
                {
                    int serviceTimeoutSeconds = provider.ProviderContext.ProviderOptions.ProviderSettings.GetValueOrDefault("serviceTimeout", 20);
                    serviceController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(serviceTimeoutSeconds));
                }

                // TODO: Info, service already stopped
                // TODO: Invalid service name
                // TODO: Can't stop service (perms)
                // TODO: Can't stop service (timeout)
            }

            base.PreSync(syncContext);
        }
        void StopService(DeploymentSyncContext syncContext)
        {
            if (_hasStoppedService)
                return;

            _hasStoppedService = true;

            var provider = syncContext.DestinationObject;

            if (provider.Name == "MSDeploy." + ServicePathProvider.ObjectName &&
                !ServicePathHelper.IsAbsolutePhysicalPath(provider.ProviderContext.Path))
            {
                var serviceName = ServicePathHelper.GetServiceName(provider.ProviderContext.Path);

                var serviceController = new ServiceController(serviceName);

                if (serviceController.Status == ServiceControllerStatus.Running ||
                    serviceController.Status == ServiceControllerStatus.Paused)
                {
                    syncContext.SourceObject.BaseContext.RaiseEvent(new WindowsServiceTraceEvent(TraceLevel.Info, Resources.StoppingServiceEvent, serviceName));

                    if (!syncContext.WhatIf)
                        serviceController.Stop();
                }

                if (!syncContext.WhatIf)
                {
                    int serviceTimeoutSeconds = provider.ProviderContext.ProviderOptions.ProviderSettings.GetValueOrDefault("serviceTimeout", 20);
                    serviceController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(serviceTimeoutSeconds));
                }

                // TODO: Info, service already stopped
                // TODO: Invalid service name
                // TODO: Can't stop service (perms)
                // TODO: Can't stop service (timeout)
            }

            base.PreSync(syncContext);
        }
 public override void Delete(DeploymentSyncContext syncContext, DeploymentObject destinationObject, DeploymentObject sourceParentObject, ref bool proceed)
 {
     StopService(syncContext);
 }
 public override void AddChild(DeploymentSyncContext syncContext, DeploymentObject destinationParentObject, ref DeploymentObject sourceObject, ref bool proceed)
 {
     StopService(syncContext);
 }
 public override void Update(DeploymentSyncContext syncContext, DeploymentObject destinationObject, ref DeploymentObject sourceObject, ref bool proceed)
 {
     StopService(syncContext);
 }