防止C#程序多开

最近写的C#程序启动时有点慢,打开时经常会产生没点开的错觉,为了防止多次运行使用了GUID判断防止多开。好处是不依赖文件名,可以绝对识别是否是同一进程。

以下代码直接粘贴使用即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//防多开BEGIN
Guid ownGUID = new Guid(((GuidAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute))).Value);
Guid proGUID;
int ownPID = Process.GetCurrentProcess().Id;
int proPID;
foreach (Process p in Process.GetProcesses())
{
try
{
proGUID = new Guid(((GuidAttribute)Attribute.GetCustomAttribute(Assembly.LoadFile(p.MainModule.FileName), typeof(GuidAttribute))).Value);
proPID = p.Id;
if (proGUID.Equals(ownGUID) && proPID != ownPID)
{
Environment.Exit(Environment.ExitCode);
}
}
catch
{
continue;//遇上进程访问异常就跳过该进程
}
}
//防多开END