我的应用程序在两个构建版本中以exe身份发布 - DeveloperBuild和ClientBuild(UAT)。 DeveloperBuild适用于内部开发人员和QA测试,而ClientBuild适用于最终客户。 ' DeveloperBuild'和' ClientBuild'实际上是集会名称。
我想限制用户打开多个构建实例。简单来说,User应该能够打开DeveloperBuild的单个实例 和ClientBuild的单个实例同时, 但是不应允许用户同时打开DeveloperBuild或ClientBuild的多个实例。
这是我尝试过的。下面的代码帮助我维护我的应用程序的单个实例, 但它没有区分Developer Build和Client Build。我希望用户可以同时打开两个版本的单个实例。
///应用程序的入口点
protected override void OnStartup(StartupEventArgs e)
{
const string sMutexUniqueName = "MutexForMyApp";
bool createdNew;
_mutex = new Mutex(true, sMutexUniqueName, out createdNew);
// App is already running! Exiting the application
if (!createdNew)
{
MessageBox.Show("App is already running, so cannot run another instance !","MyApp",MessageBoxButton.OK,MessageBoxImage.Exclamation);
Application.Current.Shutdown();
}
base.OnStartup(e);
//Initialize the bootstrapper and run
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
答案 0 :(得分:1)
每个版本的互斥锁名称必须是唯一的。由于每个版本都有不同的程序集名称,因此可以在互斥锁的名称中包含此名称,如下所示。
protected override void OnStartup(StartupEventArgs e)
{
string sMutexUniqueName = "MutexForMyApp" + Assembly.GetExecutingAssembly().GetName().Name;
bool createdNew;
_mutex = new Mutex(true, sMutexUniqueName, out createdNew);
// App is already running! Exiting the application
if (!createdNew)
{
MessageBox.Show("App is already running, so cannot run another instance !","MyApp",MessageBoxButton.OK,MessageBoxImage.Exclamation);
Application.Current.Shutdown();
}
base.OnStartup(e);
//Initialize the bootstrapper and run
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}