zoukankan      html  css  js  c++  java
  • C# 判断程序是否已经在运行

     方式1:

      /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                //获取欲启动进程名
                string strProcessName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
                ////获取版本号 
                //CommonData.VersionNumber = Application.ProductVersion; 
                //检查进程是否已经启动,已经启动则显示报错信息退出程序。 
                if (System.Diagnostics.Process.GetProcessesByName(strProcessName).Length > 1)
                {
    
                    MessageBox.Show("CtiAgentClient呼叫中心客户端已经运行!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    Application.Exit();
                    return;
                }
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new frmMain());
            }

     方式2:

    第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行
    
     
    static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
     static void Main()
            {
                 
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                //控制当前程序已经打开(即启动)
                //方式1:利用Mutex互斥量实现同时只有一个进程实例在运行
                //互斥锁(Mutex)
                //互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。
                //互斥锁可适用于一个共享资源每次只能被一个线程访问的情况
                bool flag = false;
                System.Threading.Mutex hMutex = new System.Threading.Mutex(true, Application.ProductName, out flag);
                bool b = hMutex.WaitOne(0, false);
                /*上面的参数说明:
                 第一个参数【initiallyOwned】:true:指示调用线程是否应具有互斥体的初始所有权 (老实说没理解透)
                 第二个参数【name】:程序唯一name,(当前操作系统中)判定重复运行的标志
                 第三个参数【createdNew】:返回值,如果检测到已经启动则返回(false)。
                 */
                if (flag)
                {
                    //没有启动相同的程序
                    Application.Run(new MainForm());
                }
                else
                {
                    MessageBox.Show("当前程序已在运行,请勿重复运行。");
                    Environment.Exit(1);//退出程序 
                }
            }
    }
  • 相关阅读:
    oracle 游标的使用
    mvc的表单发送ajax请求,太强大了!!!!
    报表页面的异步加载
    一道关于集合分组并进行笛卡尔积的题目思路
    EF常用操作截图
    大数乘法取模运算(二进制)
    求sqrt()底层效率问题(二分/牛顿迭代)
    CodeForces 282C(位运算)
    Codeforces Round #371 (Div. 2)(setunique)
    Codeforces Round #370 (Div. 2)(简单逻辑,比较水)
  • 原文地址:https://www.cnblogs.com/aijiao/p/10195879.html
Copyright © 2011-2022 走看看