Можно ли использовать .NET 8 для службы Windows?

Я пытаюсь создать новую службу Windows в Visual Studio 2022 с последней версией LTS .NET (8.0).

Когда я создаю службу Windows в Visual Studio, я не могу выбрать современную версию .NET. Самая новая версия, которую я могу выбрать, — V4.

Какая здесь ситуация, это правильно? Нельзя ли использовать .NET 8 в службе Windows?

С уважением,

Как я предполагаю, вы пытаетесь выбрать .Net Framework (а не ядро ​​.Net), последняя версия которого в настоящее время составляет 4.8.1...

Mina- 21.06.2024 09:36

Отвечает ли это на ваш вопрос? Написание службы Windows в ядре .net

Filburt 21.06.2024 09:36

Конечно, это возможно Learn.microsoft.com/en-us/dotnet/core/extensions/… но у вас может не быть готового шаблона в Visual Studio для этого.

Simon Mourier 21.06.2024 09:38

Вероятно, вы путаете .NET Framework и .NET Core. Последняя версия .NET Framework — 4.8. .NET 5 и более поздние версии на самом деле являются версиями .NET Core, из которых часть Core удалена по маркетинговым причинам. Соответствующий шаблон .NET (Core) — это Worker-сервис.

Panagiotis Kanavos 21.06.2024 13:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
505
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это возможно, и в Visual Studio есть шаблон. Проблема в том, что .NET 8 на самом деле является версией .NET Core. .NET 5 и более поздние версии на самом деле являются версиями .NET Core, в которых часть Core удалена в маркетинговых целях.

Вам нужен шаблон Worker Service, доступный как минимум начиная с версии .NET Core 3 (возможно, даже 2). При этом создается кроссплатформенная фоновая служба, которую можно разместить в Linux или Windows путем добавления соответствующего пакета NuGet.

Сам шаблон создает класс Worker, производный от BackgroundService, и запускает его:

Program.cs содержит только это

using App.WorkerService;

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();

IHost host = builder.Build();
host.Run();

Начальный рабочий класс

namespace App.WorkerService;

public sealed class Worker(ILogger<Worker> logger) : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1_000, stoppingToken);
        }
    }
}

Этот проект может работать где угодно. Создать службу Windows с помощью BackgroundService показывает изменения, необходимые для размещения ее в качестве службы. Самый важный из них — установить Microsoft.Extensions.Hosting.WindowsServices и вызвать AddWindowsService, чтобы зарегистрировать службу и разрешить управление ею с помощью сервисных команд.

Службы обычно запускаются с использованием учетных записей с ограниченным доступом, которые не могут просто регистрировать службы. Администратор может установить службу с помощью пакета установщика Windows. Создать установщик службы Windows показывает, как создать установщик для этого случая.

Другой вариант — использовать sc create из командной строки, чтобы зарегистрировать исполняемый файл в качестве службы Windows.

sc create TestService binpath= C:\Path\To\myservice.exe

В PowerShell то же самое можно сделать с помощью команды New-Service.

New-Service -Name "TestService" -BinaryPathName 'C:\Path\To\myservice.exe'

Большое спасибо за ваш исчерпывающий ответ. Именование Microsoft очень запутанное, и это проясняет ситуацию :-)

Toby 22.06.2024 14:54

Другие вопросы по теме