2016-11-29 5 views
0

プロダクション環境では、リモートアシスタンスがPCで開始されたときにウィンドウを開きたいので、PCに接続する人にはさらにオプションがあります。しかし、これが可能なら何も見つけることができないのですか?もしそうなら、それをどのように検出するか?C#リモートアシスタンス接続の検出

答えて

0

これはできますが、それは難しいと感じています。これは一般的に避けています。詳細については、How to detect RDC from C#.netを参照してください。

RDPを開始するには、ポート3389でリッスンする必要があります。このようにすればうまくいくはずです。

int port = 3389; 
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", false)) 
{ 
    if (key != null) 
    { 
     object value = key.GetValue("PortNumber"); 
     if (value != null) port = Convert.ToInt32(value); 
    } 
} 

しかし、ポート番号を設定すると、これが最適な方法ではありません。 次にPinvokeとCassiaがあります。

public bool IsComputerUsedByTS() 
{ 
    var tsMgr = new TerminalServicesManager(); 
    var localSvr = tsMgr.GetLocalServer(); 
    var sessions = localSvr.GetSessions(); 
    foreach(var session in sessions) 
    { 
     if(session.ConnectionState == ConnectionState.Active || 
      session.ConnectionState == ConnectionState.Connected) //Add more states you want to check for as needed 
     { 
      return true; 
     } 
    } 
    return false; 
} 

そして最後にではなく、少なくとも:

System.Windows.Forms.SystemInformation.TerminalServerSession 

これはフォームがインポート使用していますが、非常にシンプルなソリューションですカシアで、あなたのような何かを行うことができます。リモートデスクトップ環境でプログラムを実行すると、trueが返されます。

+0

こんにちは@SilentStorm私はそれを試してみましたが、私はRDC接続が開いているときに新しいセッションを取得しません。 – mortenstarck

+0

また、これを試すこともできます: 'System.Windows.Forms.SystemInformation.TerminalServerSession' rdp接続用のboolを返しますが、フォームインポートを使用します。 – SilentStorm

+0

そして、どのような方法を使いましたか?最初か後者? – SilentStorm

関連する問題