Я совершенно новичок в мире 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();
}
}
}