バックグラウンドで実行する必要のあるプログラムがあり、ユーザーが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に何も表示されないので、私はこれが本当に好きです。ただし、これを行うために、次のような関数へのアクセスを断念しました。Windowsメッセージ(Likeまたは)をvoid WndProc(ref Message m)
聞くことができず、使用するハンドルがありません。コードをより堅牢にして、ハウスクリーニングを実行できるようにします。ユーザーがプログラムを閉じる前にログオフするか、セッションから切断した場合。WTS_REMOTE_DISCONNECT
WTS_SESSION_LOGOFF
bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags);
ケーキを食べて食べる方法についてのアドバイスはありますか?