C#防止プログラムの複数回実行

5369 ワード

私のテストを経て、まだ使いやすいですが、ログアウトせずに別のユーザーで入ると、プログラムが実行されたと判断できない問題があります.したがって,単一ユーザ環境に限られているが,まだ完璧ではない.
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