我在生产环境中有一个程序,我喜欢打开一个窗口,当在PC上启动远程协助时,连接到PC的人有更多选择。但如果可能的话,我找不到任何东西?如果有,任何想法如何检测它?
答案 0 :(得分: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。与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
。