在Windows上将应用程序限制为每个shell会话的一个实例

有很多限制应用程序运行两次的解决方案。 按进程名称进行搜索,使用命名互斥锁等。但是,如果我想将应用程序限制在shell会话中,所有这些方法都不起作用。

用户可能在Windows上拥有超过登录会话和shell(对吧?)? 如果这是真的,我希望能够在每个shell会话中运行我的应用程序的一个实例,但只允许一个。

有没有办法获得一个shell标识符,然后可以将其放入互斥体名称中?


您可以创建本地(仅限会话)或全局(整个系统)互斥。 有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx。 寻找全球和本地。


您要使用的shell标识符是用户名。 这是可用的Environment::UserNameGetUserName()


你可以从当前进程的进程ID转到WTS会话ID,我认为这将做你需要的。 ProcessIdToSessionId

你应该知道终端服务会话可以从一个桌面断开,然后通过另一个桌面连接,所以'shell'实际上可以改变,但会话ID应该保持不变。

链接地址: http://www.djcxy.com/p/51163.html

上一篇: Restrict application to one instance per shell session on Windows

下一篇: Ensure a single instance of an application in Linux