Example #1
0
        /// <summary>
        /// Evento ocurrido al iniciarse el servicio de windows
        /// </summary>
        /// <param name="args">Argumentos de inicio</param>
        protected override void OnStart(string[] args)
        {
            _log.Info($"Iniciado el servicio '{nameof(Win32Service)}'");

#if DEBUG
            // En depuracion se inicia directamente
            this.Timer_Tick(null, null);
#else
            // Actualizar el estado del servicio en el ServiceManager de windows a inicio Pendiente
            ServiceStatus serviceStatus = new ServiceStatus {
                dwCurrentState = ServiceState.SERVICE_START_PENDING, dwWaitHint = 100000
            };
            WinApi32Helpers.SetServiceStatus(this.ServiceHandle, ref serviceStatus);


            // la primera vez que arranca el servicio, se inicia el proceso en la hora especificada de inicio y se guarda el flag
            // NOTA: si la hora especificada es menor que la hora actual mas el tiempo minimo por defecto, se usa la hora del dia siguiente
            double interval = (this._processStartTime.TimeOfDay - DateTime.Now.AddMinutes(DEFAULT_FIRST_TIME).TimeOfDay).TotalMinutes;
            _timer.Interval     = 1000 * 60 * ((interval < 0) ? (this._processStartTime.TimeOfDay.Add(new TimeSpan(1, 0, 0, 0)) - DateTime.Now.TimeOfDay).TotalMinutes : interval);
            _flagFirstStartTime = true;

            // iniciar el timer
            _timer.Start();

            // Actualizar el estado del servicio en el ServiceManager de windows a ejecutandose
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            WinApi32Helpers.SetServiceStatus(this.ServiceHandle, ref serviceStatus);
#endif
        }
Example #2
0
        /// <summary>
        /// Evento ocurrido al detenerse el servicio de windows
        /// </summary>
        protected override void OnStop()
        {
            _log.Info($"Detenido el servicio '{nameof(Win32Service)}'");

            // Actualizar el estado del servicio en el ServiceManager de windows a inicio Pendiente
            ServiceStatus serviceStatus = new ServiceStatus {
                dwCurrentState = ServiceState.SERVICE_START_PENDING, dwWaitHint = 100000
            };

            WinApi32Helpers.SetServiceStatus(this.ServiceHandle, ref serviceStatus);

            // detener el timer
            _timer.Stop();

            // Actualizar el estado del servicio en el ServiceManager de windows a ejecutandose
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            WinApi32Helpers.SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }