2011-02-08 12 views
2

私のアプリケーションはWindows Server 2008でサービスとして実行されています。アクティブなコンソールセッションを検出する方法を探しています。これは、コンソールまたは管理セッションとして開始されたRDPセッション( "mstsc/admin")のいずれかです。Windows Server 2008でコンソール(管理)セッションをプログラムで検出していますか?

コンソールセッションは「コンソール」と呼ばれますが、RDPセッションでは失われています。 Windows 2003では、コンソールセッションが常にid 0で実行されていたので簡単でした。これはVista以降に変更されたため、別の方法を探しています。

私はすでにWTSxxx Win32 APIをチェックしていますが、私が探しているものが見つかりませんでした。

誰でも手伝いできますか?

+0

で誰かが箱の中にログインした際に決定しようとしていますか? –

+0

これはうまくいきません。 Vista/Server2008以降、サービスが他のセッションとやりとりすることができない理由について詳しくは、Googleの「セッション0の隔離」を参照してください。 –

+0

@ジョン:はい、誰かがボックスにログインしたことを知りたいのですが、それが管理(コンソール)セッションのときだけです。私は標準のRDPセッションを検出したくありません。 – Tinus

答えて

0

1つのオプションはあなたのサービスを持っていますCanHandleSessionChangeEventはtrueに設定してからOnSessionChange(SessionChangeDescription changeDescription)を実装します。ChangeDescription.Reason == SessionChangeReason.ConsoleConnectあなたが誰かにコンソールに接続されている場合。

protected override void OnSessionChange(SessionChangeDescription changeDescription) 
{ 
    if(changeDescription.Reason == SessionChangeReason.ConsoleConnect) 
    { 
     //use changeDescription.SessionId to find if the logged in user 
     // to that session is an administrator. 
    } 
} 
+0

ありがとう、それを試してみましょう。 – Tinus

0

あなたは現在、物理的なコンソールに接続されているセッションのIDを探しているなら、APIはWTSGetActiveConsoleSessionId

+0

ありがとう、それは**まさに**私が探していたものです(私はそれを見落としたようです)。 – Tinus

+0

有望でしたが動作しません。私は物理的なモニタ/キーボードを持つ2008R2ボックスを持っていますが、コンソールセッションを開始するには "mstsc/admin"を介してRDPを使用してください。私のアクティブなセッションIDは2になりましたが、WTSGetActiveConsoleSessionIdは1を返します(これは切断された物理セッションです)。 – Tinus

関連する問題