先看下未限制前的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();
}
}
}
}
祝您用餐愉快。