通过个人测试,还比较好用,可是有个问题,若是不注销,用另外一个用户进入,则程序不能判断出已运行。因此只限于用在单用户环境,仍是不太完美。app
class Program { [STAThread] static void Main(string[] args) { //防止程序屡次运行 if (!OneInstance.IsFirst("MyTest")) { Console.WriteLine("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!"); return; } Console.WriteLine("正在运行中"); Console.ReadLine(); } } public static class OneInstance { ///<summary> ///判断程序是否正在运行 ///</summary> ///<param name="appId">程序名称</param> ///<returns>若是程序是第一次运行返回True,不然返回False</returns> public static bool IsFirst(string appId) { bool ret = false; if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero) { CreateMutex(IntPtr.Zero, 0, appId); ret = true; } return ret; } [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] private static extern IntPtr OpenMutex( uint dwDesiredAccess, // access int bInheritHandle, // inheritance option string lpName // object name ); [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] private static extern IntPtr CreateMutex( IntPtr lpMutexAttributes, // SD int bInitialOwner, // initial owner string lpName // object name ); }
出处:http://blog.csdn.net/lanman/article/details/3648455测试