带有互斥体的单实例应用程序

完成描述如下:

创建单实例应用程序的正确方法是什么?

要么

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

上一篇: Single Instance Application OS wide with mutex

下一篇: Single instance WPF application using Caliburn.Micro