【发布时间】:2015-08-26 15:27:23
【问题描述】:
按照描述完成:
What is the correct way to create a single-instance application?
或
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);
}
【问题讨论】:
-
附带说明,我建议您将现有应用程序置于前台,然后显示消息框(在其前面),或者只是将当前应用程序置于前台而不显示消息(由许多应用程序作为良好的用户体验完成)。
-
互斥锁跨多个线程和多个进程工作。从未见过它说他们跨会话工作。
-
它有什么“不工作”?是允许每个用户一个实例,每个用户多个实例,还是每台机器只允许一个实例?
-
我只需要在计算机上有一个实例。
-
您是否尝试过为互斥锁添加前缀“Global\”(根据the documentation for Terminal Servers)