У меня есть программа, которая должна сидеть в фоновом режиме, и когда пользователь подключается к сеансу RDP, он будет выполнять некоторую настройку среды, а затем запускает программу. Когда программа будет закрыта, она будет выполнять некоторую работу и выйти из сеанса.
Текущий способ, которым я занимаюсь, это запустить серверное приложение на этом терминале. Это построено как приложение форм Windows, чтобы окно консоли не отображалось:
public static void Main()
{
//(Snip...) Do some setup work
Process proc = new Process();
//(Snip...) Setup the process
proc.Start();
proc.WaitForExit();
//(Snip...) Do some housecleaning
NativeMethods.ExitWindowsEx(0, 0);
}
Мне это очень нравится, потому что на панели задач нет элемента, и в alt-tab ничего не отображается. Однако для этого я отказался от доступа к таким функциям, как void WndProc(ref Message m)
Итак, теперь я не могу слушать сообщения Windows (например, WTS_REMOTE_DISCONNECT
или WTS_SESSION_LOGOFF
) и не иметь дескриптора для bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);
Я хотел бы, чтобы мой код был более надежным, поэтому он будет выполнять очистку если пользователь выходит из сеанса или отключается от сеанса до закрытия программы.
Любые рекомендации о том, как я могу получить торт и съесть его тоже?