C# 实现程序只启动一次(总结)

我前面的三篇文章是从网上找到的(以下连接),都说是实现程序只启动一次的功能。html

C#防止程序屡次运行
C#检测程序重复运行的函数(能够在多用户登陆状况下检测)
C# 实现程序只启动一次(屡次运行激活第一个实例,使其得到焦点,并在最前端显示)
C# 实现程序只启动一次(实现程序自重启)前端

若是你已经读了前面的几篇文章,我相信你本身或许已经有答案了,我本身用下来感受仍是有一些区别的,如今把我总结的记录下来:函数

一:使用System.Threading.Mutex类测试

using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew)) 

使用这个方法,我本身测试下来,在Windows的单一用户使用的时候可使用,当多个Windows用户同时使用的时候则没法检测到程序是否在运行状态。ui

二:检查进程名的htm

Process[] processes = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);

使用这个方法能够检查当前机器上的全部进程名称,多个用户也能够同时检测。可是若是程序更名运行,则没法检测到程序是否在运行状态。blog

三:使用API进程

API一:
        [DllImport("User32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
        [DllImport("User32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
API二:
        [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 
            );

这个方法在我前面的文章中已经提到了两种API的使用get

API一,可使程序前端显示出来,而且获取为焦点。
API二,其实更像System.Threading.Mutex类,cmd

由于在项目中暂时没有使用这些功能,因此没有太多的意见。

相关文章
相关标签/搜索