【发布时间】:2014-08-05 21:53:02
【问题描述】:
我有一个带有 C# 代码的 Windows 窗体应用程序,如下所示(针对 .NET 框架 4)。
在我的开发人员工作站上,此代码可防止我启动该程序的多个实例。但是,QA 有一个 Citrix 测试环境,每个用户仍然可以启动多个实例。
如何防止给定用户在 Citrix 中运行多个实例?
[STAThread]
static void Main(string[] args)
{
bool isFirstInstance;
Mutex m = new Mutex(true, "[App name goes here] mutex", out isFirstInstance);
if (isFirstInstance)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run();
// Prevent the just-in-time (JIT) compiler from optimizing away our Mutex.
// See: http://www.ai.uga.edu/mc/SingleInstance.html
GC.KeepAlive(m);
}
}
出于技术原因,我们希望限制实例数量。该程序使用自承载 WCF 与同一用户运行的另一个进程进行通信。我们只希望每个用户有一个该程序的实例。
我不知道Citrix环境的任何细节,但可以询问。
谢谢。
【问题讨论】:
-
第一个quicky google hit 得分。
-
@nobugz:感激地接受谴责。
-
我们在这里讨论的不是已发布的应用程序。我们发布的应用程序进行系统调用,启动 C# 应用程序,然后出现在用户的屏幕上。我们可能想要发布它,并让用户手动启动它。或者像 Bogdan 建议的那样使用全局互斥锁。
标签: c# mutex multiple-instances citrix