Определить активный сеанс RDP

2

Мне нужно реализовать переключатель мертвецов в моем приложении. Если приложение запущено из RDP, мне нужно действовать, если оно теряет соединение с удаленным клиентом.

Я знаю, когда я работаю в RDP с помощью

GetSystemMetrics(SystemMetric.SM_REMOTESESSION)

Но когда клиент закрывается без выхода из системы, сеанс продолжается. Это сценарий, на который я хочу отреагировать, но я не знаю, как обнаружить отключение клиента. Мне нужно знать, есть ли активный пользователь RDP или нет.

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

Я бы предпочел решение, не относящееся к WinForms, WPF, UWP и т.д. Бонусные баллы, если оно работает и с .NET Core.

  • 0
    может быть, это поможет
  • 1
    Обратите внимание, что SM_REMOTESESSION не всегда рекомендуется: docs.microsoft.com/en-us/windows/desktop/termserv/…
Показать ещё 1 комментарий
Теги:
pinvoke
remote-desktop

1 ответ

0

Не решение .NET Core, а решение для Windows API. Существуют уведомления об изменении сеанса, которые вы можете выбрать через WTSRegisterSessionNotification (и, аналогично, WTSRegisterSessionNotification регистрацию позже).

Эти уведомления затем доставляются в ваш цикл сообщений Windows, поэтому вам нужно запустить его. (WinForms и WPF делают, и есть определенные механизмы, позволяющие вам выполнять пользовательскую обработку сообщений)

Затем вы получите уведомление, когда сеанс будет заблокирован или отключен.

  • 0
    К сожалению, WTSRegisterSessionNotification требует возможности переопределить WndProc, и я в консольном приложении. Я надеялся, что для этого найдется лучшее решение, так как, думаю, следует отключить службу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню