C#只允许运行一个实例
var preInstance = Process.GetProcesses().FirstOrDefault(p => { try { if (p.Id != Process.GetCurrentProcess().Id && p.MainModule != null && p.MainModule.FileName.ToLower() == Assembly.GetExecutingAssembly().Location.ToLower()) return true; return false; } catch { return false; } }); if (preInstance != null) { MessageBox.Show("程序已在运行!"); return; }
以上代码有性能问题,使用以下代码:
using System; using System.Threading; class Program { static void Main(string[] args) { bool createdNew; Mutex mutex = new Mutex(true, "MyMutex", out createdNew); if (!createdNew) { // 如果不是第一个实例,则已经有实例在运行 Console.WriteLine("Another instance is already running."); return; } // 在这里写你的应用程序代码 // 释放互斥体 mutex.ReleaseMutex(); } }
桂棹兮兰桨,击空明兮溯流光。