1 方法一:根据进程名称判断
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
string processName = Process.GetCurrentProcess().ProcessName;
Process[] processes = Process.GetProcessesByName(processName);
if (processes.Length > 1)
{
Console.WriteLine("程序正在运行中!");
Console.ReadKey();
return;
}
Console.WriteLine("程序启动,按任意键退出。");
Console.ReadKey();
}
}
重复运行后结果
2 方法二:使用互斥锁(Mutex)
using System;
using System.Threading;
class Program
{
static void Main()
{
bool createdNew;
Mutex mutex = new Mutex(true, "Global\\MyUniqueAppId", out createdNew);
if (!createdNew)
{
Console.WriteLine("程序正在运行!,按任意键退出。");
Console.ReadKey();
return;
}
Console.WriteLine("程序启动,按任意键退出。");
Console.ReadKey();
// 释放互斥锁
mutex.ReleaseMutex();
}
}
多次运行结果
总结:方法一比较简洁明了,方法二貌似显得更专业一点,哈哈无效总结,不过好像还有一种方法:文件锁,不过这种方式不安全,如下
3 方法三:文件锁
using System;
using System.IO;
class Program
{
static void Main()
{
string lockFilePath = Path.Combine(Path.GetTempPath(), "MyUniqueApp.lock");
if (File.Exists(lockFilePath))
{
Console.WriteLine("程序正在运行,按任意键退出。");
Console.ReadKey();
return;
}
// 创建锁文件
File.Create(lockFilePath).Close();
Console.WriteLine("程序启动,按任意键退出。");
Console.ReadKey();
// 删除锁文件
File.Delete(lockFilePath);
}
}