до конца так и не решил.
В чем суть: .NET 7.0, необходимо сделать Worker Service чтобы нужный мне функционал крутился ПОСТОЯННО в бэкграунде и через пайпы общался с UI в двухстороннем порядке.
Но также очень важный момент чтобы он АВТОМАТИЧЕСКИ запускался после того как система включается. Т.е после перезагрузок системы и тд
Мое решение:
Я создал обычный BackgroundWorker как учат гайды, могу также вызывать его с UI когда надо, вот как выглядит код:
public class MyBackgroundService : BackgroundService{
private NamedPipeServerStream _pipeServer;
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
_pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.Out); await _pipeServer.WaitForConnectionAsync(stoppingToken);
var writer = new StreamWriter(_pipeServer);
await writer.WriteLineAsync("Message from Service"); await writer.FlushAsync();
}
public override async Task StopAsync(CancellationToken cancellationToken) {
await _pipeServer.DisposeAsync(); await base.StopAsync(cancellationToken);
}
private async Task DeviceUpdate() {
}}
Вызов с UI после логина пользователя:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) => { services.AddHostedService<MyBackgroundService>(); })
Каким образом мне сделать чтобы этот бэкграунд сервис всегда крутился в фоне независимо от UI, после включения системы и желательно чтобы без админ прав процесс нельзя было убить ( но это уже не так важно, мне главное именно автозапуск после старта )?
Чатгпт мне советовал два варианта:
1. Через установщик во время первичной установки
2. В рантайме при запуске приложения или определенных его состояний
Я попытался во второй вариант с добавлением задачи в Windows Task Scheduler, но даже с админ правами мне виндовс не разрешает это делать.
Первый вариант тоже не совсем понятен. Я пытался инсталлятор делать через MSIX Packaging Tool сразу из окна Visual Studio, но там нет опций с конфигурацией приложения перед установкой. Щас смотреть пытаюсь в сторону WiX Toolset и Microsoft Installer Extension: https://learn.microsoft.com/en-us/dotnet/core/extensions/windows-service-with-installer?tabs=wix
Но все равно не особо понятно каким образом я могу сделать так чтобы бэкграунд сервис всегда крутился независимо от UI ? Помогите пожалуйста в какую сторону мне копать, спасибо
P.S: это не малварь, а попросту MDM приложение для контроля корпоративных устройств чтобы юзеры не делали лишних действий которые могут навредить
hangfire / quatrz
ему надо чтобы у него сервис автоматом запускался а не шедулер
веб апп с хенгфайром или кварцом + сервер настроенный на автостарт
Тебе надо создать приложение виндовс сервис и зарегать его в системе
Обсуждают сегодня