使用不允许多个会话的程序寻找build议

我们使用远程桌面服务运行Windows Server 2012 R2计算机。 这个想法是,每个人都可以login并运行需要大量configuration的公司软件,这样我们只需configuration一次,然后将设置委托给该PC上的每个人。

我们还部署了RemoteApps,它适用于大多数程序。

但是,有一个特定的计划,路创RadioRA,拒绝在这种types的环境中工作。 如果计算机上的任何人打开它,而另一个用户尝试在自己的RDP会话中打开它,则会抱怨程序已经运行,无法启动。

我的第一个想法是尝试Sandboxie,因为我知道这是它的目的。 它根本没有工作… .NET立即崩溃,我得到吨的“文件太大,沙箱”的错误和其他各种崩溃,直到我强制closuresSandboxie。

我的下一个想法是尝试“runas”,因为它内置在Windows中。 我用一个简单的密码创build了一个名为runastest的用户,并尝试启动指向程序的EXE文件的runas。 input密码,并按预期启动。 切换到另一个用户,做同样的事情使用相同的runestst用户…已经运行相同的错误。

我不确定还有什么可以尝试的。 我们需要一种方法来启动程序,而不必检查计算机上正在运行的其他程序,本质上 – 我无法想象为什么一次打开多个副本实际上会有问题。 无论如何,一切都存储在活动用户的会话,AppData和什么。

该程序旨在作为单个实例运行。

在Windows开发中,它被称为“全球互斥”。 我不知道你怎么能绕过它。 即使你可以,这是一个坏主意。 既然这个程序是在单一实例的基础上开发的,绕过了这个,会给你带来一个不可预测的软件行为。

恕我直言,你应该在远程主机上安装VNC服务器,并共享实例,每个人都将访问相同的桌面实例,从而允许同时使用该软件。 是! 同时,这意味着人们会开始争取移动鼠标。

编辑:

通过一些研究,我发现了Lync的这个解决scheme 。 也许这对你有用。 它使用ThinApp的“IsolatedSynchronizationObjects”选项,确保“全局互斥”将被隔离。 在同一个链接中,它展示了如何使用Process Explorer检测应用程序是否使用全局互斥锁。