Мое приложение Windows Service не может обнаружить событие блокировки/разблокировки компьютера [закрыто]C#

Место общения программистов C#
Anonymous
 Мое приложение Windows Service не может обнаружить событие блокировки/разблокировки компьютера [закрыто]

Сообщение Anonymous »

Я развернул приложение Service Windows в C#. Когда я запускаю свое приложение в режиме отладки, оно может обнаружить события блокировки /разблокировки машины, но когда я запускаю его в качестве услуги, оно не может - почему?
Я также столкнулся с той же ситуацией в своем работнике Windows, я изменил свойства своего приложения (щелкнуть правой кнопкой мыши в системе служб и>> локальной учетной записи системы> позволить сервису взаимодействовать с рабочим стоком) < /p>
< /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p>public BackgroundWorkerService(ILogger logger, ILoggerFactory loggerFactory)
{
_logger = logger;
// Subscribe to session switch events (lock/unlock)
SystemEvents.SessionSwitch += OnSessionSwitch;
EventLog.WriteEntry("BackgroundWorkerService", "Service started.", EventLogEntryType.Information);

// Create a logger instance for WindowChangeLogger
var windowLogger = loggerFactory.CreateLogger();
_windowLogger = new WindowChangeLogger(_connectionString, windowLogger);
}

// Handle Service Start
public override Task StartAsync(CancellationToken cancellationToken)
{

// Register for session notifications

_logger?.LogInformation("Service started and registered for session notifications.");
_logger?.LogInformation("Service Starting...");

// Ensure we don't subscribe multiple times
SystemEvents.SessionSwitch -= OnSessionSwitch;
SystemEvents.SessionSwitch += OnSessionSwitch;

LogStartupShutdownEvent("Service Started");

return base.StartAsync(cancellationToken);
}

// Handle Service Stop
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger?.LogInformation("Service stopping...");
LogStartupShutdownEvent("Service Stopped");

// Unsubscribe from events when stopping the service
SystemEvents.SessionSwitch -= OnSessionSwitch;

return base.StopAsync(cancellationToken);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger?.LogInformation("Service starting...");

try
{
_logger?.LogInformation("Initializing service...");
await Task.Delay(1000, stoppingToken);

_logger?.LogInformation("Starting WindowChangeLogger...");
var windowLoggerTask = Task.Run(() => _windowLogger.StartTracking(), stoppingToken);

_logger?.LogInformation("Started background logging tasks.");

_logger?.LogInformation("Entering main loop...");
while (!stoppingToken.IsCancellationRequested)
{
_logger?.LogInformation("Service running...");
await Task.Delay(1000, stoppingToken);
}

_logger?.LogInformation("Waiting for background tasks to complete...");
await Task.WhenAll(windowLoggerTask);
}
catch (TaskCanceledException)
{
_logger?.LogInformation("Service was canceled during startup.");
}
catch (Exception ex)
{
_logger?.LogError($"Service failed to start: {ex.Message}");
}
}

private void OnSessionSwitch(object sender, SessionSwitchEventArgs e)
{
_logger?.LogInformation($"SessionSwitch event received: {e.Reason}");
if (e == null)
{
throw new ArgumentNullException(nameof(e));
}

try
{
switch (e.Reason)
{
case SessionSwitchReason.SessionLock:
// Log lock event
LogLockUnlockEvent("Lock");
break;
case SessionSwitchReason.SessionUnlock:
// Log unlock event
LogLockUnlockEvent("Unlock");
break;
}
}
catch (Exception ex)
{
_logger?.LogError($"Error handling session switch: {ex.Message}");
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... lock-event

Вернуться в «C#»