Как добавить счетчик для Top Shelf Service Recovery - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужен счетчик для службы Windows, который будет подсчитывать каждый раз при сбое службы, счет будет включен в электронное письмо, отправленное мне после сбоя. Но как сохранить переменные данные, чтобы перезапуск службы не возвращался к значению по умолчанию. Пробовал OnException и размещение счетчика + = 1 в Сервисном восстановлении

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using log4net.Config;
using Topshelf;
using System.Configuration;

namespace PVStuff
{
    static class Program
    {
        static void Main(string[] args)
        {
            XmlConfigurator.Configure();
            int CrashCount = 1;

            EMailAdapter emailAp = new EMailAdapter();
            string eMailTo, eMailSub;
            //email config
            eMailTo = ConfigurationManager.AppSettings["PVMailList"];
            eMailSub = ConfigurationManager.AppSettings["PVMailSubject"];
        var rc = HostFactory.Run(x =>
                {
                    x.Service<PVStuffService>(s =>
                    {
                        s.ConstructUsing(nameof => new PVStuffService());
                        s.WhenStarted(tc => tc.Start());
                        s.WhenStopped(tc => tc.Stop());
                        emailAp.SendMessage(eMailTo, eMailSub, "PV Stuff Windows Service crashed unexpectedly. Count: " + CrashCount, false);
                    });

                    x.EnableServiceRecovery(r =>
                    {
                        r.RestartService(0);
                        r.OnCrashOnly();                          
                    });

                    x.OnException(t => {
                        CrashCount += 1;
                    });

                    x.RunAsLocalSystem();
                    x.UseLog4Net();

                    x.SetDescription("PV Stuff");
                    x.SetDisplayName("PV Stuff");
                    x.SetServiceName("PV Stuff");
                });

            var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
            Environment.ExitCode = exitCode;

        }
    }     
}
...