问题描述
windows2003的远程桌面,同一个用户名可登录几个界面。可以通过任务管理器-用户,切换不同桌面。其中有一个是远程的那台主机登录的桌面,暂且称主桌面。也可通过windows2003自带的mstsc程序,通过运行:mstsc.exe/console登录的控制台桌面,在这个桌面启动的程序界面,本机用户登录后,也可看见。需求应用程序只能启动一个,如果远程用户登录上来启动了程序,那么在本机的用户就启动不了,而这个程序又需要本机用户随时查看状态的。所以,我想是否在启动程序是,能判断当前用户登录的桌面是否本机的那个桌面。包括运行mstsc.exe加参数/console进入的控制台模式,或者常规登录后,通过任务管理器切换到主桌面。目前,我使用了一个替换方案,判断是远程登录,就不让启动了,在main里写:if(SystemInformation.TerminalServerSession){MessageBox.Show("远程桌面登录时,禁止启动系统,请本机登录启动","监控系统");return;}
解决方案
解决方案二:
你这个程序增加只能启动一次的限制,不就行了?时刻保证任务管理器只有一个该程序的进程
解决方案三:
如果你只想让‘监控程序’只能运行在Console,那么在windows2003下,ConsoleSession的SessionId是0。if(System.Diagnostics.Process.GetCurrentProcess().SessionId!=0){MessageBox.Show("只能在ConsoleSession启动系统,请本机登录启动","监控系统");return;}
解决方案四:
没搞过这种的,先关注下
解决方案五:
这种模式看上去不适合楼主的场景,不妨考虑做成两部分,一部分做成windows服务,完成主要的功能,由于是服务自然只能运行一个另一部分做成windows程序,任何用户都可以运行一个,用于查看数据和状态。
解决方案六:
引用2楼Forty2的回复:
...在windows2003下,ConsoleSession的SessionId是0。
注意在Windows2008后就不能这么用了。而且,‘本机用户’也有歧义:由于快速用户切换的存在,在物理机器上,也可以同时有多个用户登录。切换过程中,任何一个拥有当前物理显示和输入的用户,都应该算为你所指的‘本机用户’。