带有互斥体的单实例应用程序
完成描述如下:
创建单实例应用程序的正确方法是什么?
要么
http://www.c-sharpcorner.com/UploadFile/f9f215/how-to-restrict-the-application-to-just-one-instance/
互斥量在用户会话内正常工作。 但当我切换用户时,它不起作用。 可能是因为一个用户是一个域用户,而另一个我开始该程序的用户是本地用户? 我还没有测试过它与两个本地用户...
我需要在电脑上只有一个实例。
我预计,互斥体将成为操作系统广泛。 这是一个错误的假设吗?
public partial class App : Application
{
private static Mutex _InstanceMutex = null;
private void Application_Startup(object sender, StartupEventArgs e)
{
bool isNewMutex;
_InstanceMutex = new Mutex(true, "{ED75DE2B-69F7-4973-A58C-3A9D49B3E48D}", out isNewMutex);
if (!isNewMutex)
{
_InstanceMutex = null;
MessageBox.Show("Only one instance allowed", "ThisApp");
Process.GetCurrentProcess().Kill();
Application.Current.Shutdown();
return;
}
//base.OnStartup(e);
}
private void Application_Exit(object sender, ExitEventArgs e)
{
if (_InstanceMutex != null)
_InstanceMutex.ReleaseMutex();
//base.OnExit(e);
}
我想你创建它时想要将MutexSecurity
传递给Mutex
。 文档底部的示例演示了如何将互斥锁锁定到特定用户。 另请阅读备注,有全球和本地会议,这可能会或可能不适用于你。
互斥体构造函数(布尔,字符串,布尔,MutexSecurity)被使用。
编辑
你也可以尝试这种方法:
if(!(Mutex.TryOpenExisting("Global{ED75DE2B-69F7-4973-A58C-3A9D49B3E48D}", out tempMutex)))
{
_InstanceMutex = new Mutex(true, "Global{ED75DE2B-69F7-4973-A58C-3A9D49B3E48D}");
//Continue startup normally
}
else
{
//Already exists, shutdown app
}
除非设置了互斥锁安全性,否则不应该抛出异常。
链接地址: http://www.djcxy.com/p/51171.html