Мне нужно реализовать переключатель мертвецов в моем приложении. Если приложение запущено из RDP, мне нужно действовать, если оно теряет соединение с удаленным клиентом.
Я знаю, когда я работаю в RDP с помощью
GetSystemMetrics(SystemMetric.SM_REMOTESESSION)
Но когда клиент закрывается без выхода из системы, сеанс продолжается. Это сценарий, на который я хочу отреагировать, но я не знаю, как обнаружить отключение клиента. Мне нужно знать, есть ли активный пользователь RDP или нет.
Я мог бы потенциально найти удаленную конечную точку, наблюдая за портом RDP, но, поскольку можно было бы потенциально настроить порт не по умолчанию, я бы хотел избежать этого решения, если существует лучшее.
Я бы предпочел решение, не относящееся к WinForms, WPF, UWP и т.д. Бонусные баллы, если оно работает и с .NET Core.
Не решение .NET Core, а решение для Windows API. Существуют уведомления об изменении сеанса, которые вы можете выбрать через WTSRegisterSessionNotification
(и, аналогично, WTSRegisterSessionNotification
регистрацию позже).
Эти уведомления затем доставляются в ваш цикл сообщений Windows, поэтому вам нужно запустить его. (WinForms и WPF делают, и есть определенные механизмы, позволяющие вам выполнять пользовательскую обработку сообщений)
Затем вы получите уведомление, когда сеанс будет заблокирован или отключен.