C#应用 保证在本机只启动一个

以WPF应用为例,在Application启动前进行Check 如把Check函数放在构造函数中。

    public partial class App
    {
        public App()
        {
            //保证该应用本机只启动一个
            SingleInstanceManager.SingleInstanceCheck();
            ...
        }
    }

SingleInstanceManager为静态类

    public static class SingleInstanceManager
    {
        // ReSharper disable once NotAccessedField.Local
        static Mutex _mutex;

        // 使用静态Mutex 让我们知道该应用是否已经打开,此id唯一
        const string MutexId = "instance-mutex-304bae7c-e520-4bfe-a308-c99476062091";

        // EventWaitHandle允许我们与已经打开的唯一的应用通信,此id与mutex匹配
        const string EventWaitHandleId = "instance-wait-304bae7c-e520-4bfe-a308-c99476062091";

        public static void SingleInstanceCheck()
        {
            _mutex = new Mutex(true, MutexId, out var createdNew);

            if (!createdNew)
            {
                // 让已经启动的应用置于前台
                var handle = CreateWaitHandle();
                handle.Set();

                // 如果应用已经启动 强制退出
                Environment.Exit(0);
            }
        }

        static EventWaitHandle CreateWaitHandle()
        {
            return new EventWaitHandle(false, EventResetMode.AutoReset, EventWaitHandleId);
        }

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值