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);//退出程序 } } }
C#.net. WPF.core 技术交流群 群号205082182,欢迎加入,也可以直接点击左侧和下方的"加入QQ群",直接加入
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战