C#窗体,如何限制只能启动一个exe程序,禁止多开客户端。

本文介绍了如何通过Mutex类来实现同一应用程序只能启动一个进程的功能。Mutex是进程间同步的一种方式,确保共享资源的独占访问。在C#代码中创建Mutex实例,并通过判断是否获得初始化所有权来控制新进程的启动,从而限制exe程序多开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看下未限制前的exe程序多开效果:

然后再看下限制后的exe程序还能不能多开,结果当然是一直都一个,无法再多开了:

 

那么这种限制只能启动一个exe程序是如何实现的呢?

这里涉及到了进程间的同步问题,同一个应用程序启动后,不能再开启该程序的新进程。

它用到了一个类:Mutex,定义如下:

这个互斥类的作用是用于进程间对系统共享资源的独占访问操作系统特定对象时而设计的。

Mutex instance = new Mutex(true, "MutexName", out bool createdNew);

编写上述代码,创建互斥类Mutex的一个实例。

第1个参数initiallyOwned为true,标记调用线程是否具有初始所有权。

第2个参数name是起一个名字,如果为空,则不生效,所以要起名名字。系统会判别进程中是否有这个名称的对象,若有,则不允许再开新进程。

第3个参数createdNew指示,是否允许开启新进程。你可以根据它的返回值true或false做自己的业务逻辑。

如果为true,说明就可以开启新进程,如果为false说明已经存在一个进程了,就没必须再去创建了。

 

完整代码如下:

using System;
using System.Threading;
using System.Windows.Forms;

namespace Practice.Client
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Mutex instance = new Mutex(true, "MutexName", out bool createdNew);
            if (createdNew)
            {
                Application.Run(new MainForm());
                instance.ReleaseMutex();
            }
            else
            {
                Application.Exit();
            }
        }
    }
}

 

祝您用餐愉快。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值