我在各个实验室里收集了很多Windows平台。 从XP到最新的一切。 我有一个简单的C#/。NET应用程序运行在用户login和注销。 我需要区分真正的Consolelogin和RDP会话。 我在用
System.Diagnostics.Process.GetCurrentProcess().SessionId
得到一个sessionId
但我没有看到任何说“你在控制台上”或“你在RDP会话中”。 有这样的事吗?
对于我的需要,事实证明,Windows环境变量%sessionname%
拥有我正在寻找的信息。 在我的C#代码中,我可以说:
string sessionName = Environment.GetEnvironmentVariable("SESSIONNAME") ?? "CONSOLE";
%sessionname%
似乎持有字符串“console”或“rdp-(something)#(number)”,例如“rdt-tcp#1234”。 我不知道可能的价值观的整个范围,但它看起来像它会适合我的需要。
您可以通过调用WTSGetActiveConsoleSessionId()函数来确定当前连接到物理控制台的会话标识(如果有)。