Создайте хост на ядре. net для использования в качестве службы на Windows с верхней полкой - PullRequest
0 голосов
/ 07 мая 2020

Я совершенно новичок в мире C#. Поэтому мне сказали создать Сервис, чего я никогда не делал. Итак, я начал исследовать различные возможности и остановился на одном YouTube-канале IamTimCorrey, видео, которое я следил, было это . Он подчеркнул, что если я начну с создания консольного приложения, отладить его будет намного проще. Когда я начал создавать консоль, случайно выбрал. net core. После просмотра его видео установка сервиса не прошла.

Затем я начал гуглить и обнаружил, что можно использовать. net core в качестве службы, но с помощью Topshelf мне пришлось создать хост. Который я нашел здесь . Но у меня были проблемы с пониманием того, что к чему.

Теперь к вопросу, интересно, как мне настроить хост с помощью Topshelf? Это должно быть причиной того, что моя служба не устанавливается на моем компьютере.

Я использую Visual Studio 2019 и Topshelf v4.2.1.215,

Мой код разделен классом Heartbeat и класс программы.

using System;
using Topshelf;
using Topshelf.Builders;

namespace Heartbeat
{
    class Program
    {

        static void Main(string[] args)
        {

            var hostBuilder = new HostBuilder()
            .ConfigureAppConfiguration((hostContext, config) =>
            {
         // Configure application configuration here
         // ....
     })
            .ConfigureServices((hostContext, services) =>
            {
         // Configure application service here
       //  services.AddTransient<XXXService>();
         // ...
     });

            var exitCode = HostFactory.Run(x => 
                {
                    x.Service<Heartbeat>(s =>
                    {
                    //Servicen heter Heartbeat.
                        s.ConstructUsing(Heartbeat => new Heartbeat());
                        s.WhenStarted(Heartbeat => Heartbeat.Start());
                        s.WhenStopped(Heartbeat => Heartbeat.Stop());
                    });
                    // Service log on as
                    x.RunAsLocalSystem().StartAutomatically().EnableServiceRecovery(rc => rc.RestartService(1));
                    // Enligt heartbeat som var gjord på .net framework lib.
                    //x.RunAsLocalSystem();
                    x.SetServiceName("HeartbeatService");
                    x.SetDisplayName("Heartbeat Service");
                    x.SetDescription("This is the sample heartbeat service from a console tst from youtube.");
                });

            int exitCodeValue = (int) Convert.ChangeType(exitCode, exitCode.GetTypeCode());
            Environment.ExitCode = exitCodeValue;
        }

    }

}

    using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Timers;

namespace Heartbeat
{
    class Heartbeat
    {
        private readonly System.Timers.Timer _timer;

        public Heartbeat()
        {
            _timer = new System.Timers.Timer(1000) { AutoReset = true };
            _timer.Elapsed += timer_Elapsed;
        }

        private void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            string[] lines = new string[] { DateTime.Now.ToString() };
            File.AppendAllLines(@"C:\Users\73215787\Downloads\Heartbeat.txt", lines);
        }

        public void Start()
        {
            _timer.Start();
        }

        public void Stop()
        {
            _timer.Stop();
        }
    }
}
...