C#防止程序多次运行

C#程序在一个终端中只允许打开一次,防止多次打开 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms;namespace CB_ze { static class Program { /// <summary> /// 应用程序的主入口点。 /// < 阅读详情

经过我的测试,还比较好用,但是有个问题,如果不注销,用另一个用户进入,则程序不能判断出已运行。所以只限于用在单用户环境,还是不太完美。

  1. class Program
  2.     {
  3.         [STAThread]
  4.         static void Main(string[] args)
  5.         {
  6.             //防止程序多次运行
  7.             if (!OneInstance.IsFirst("MyTest"))
  8.             {
  9.                 Console.WriteLine("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!");
  10.                 return;
  11.             }
  12.             Console.WriteLine("正在运行中");
  13.             Console.ReadLine();
  14.         }
  15.     }
  16.     public static class OneInstance
  17.     {
  18.         ///<summary>
  19.         ///判断程序是否正在运行 
  20.         ///</summary>
  21.         ///<param name="appId">程序名称</param>
  22.         ///<returns>如果程序是第一次运行返回True,否则返回False</returns>
  23.         public static bool IsFirst(string appId)
  24.         {
  25.             bool ret = false;
  26.             if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)
  27.             {
  28.                 CreateMutex(IntPtr.Zero, 0, appId);
  29.                 ret = true;
  30.             }
  31.             return ret;
  32.         }
  33.         [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  34.         private static extern IntPtr OpenMutex(
  35.             uint dwDesiredAccess, // access 
  36.             int bInheritHandle,    // inheritance option 
  37.             string lpName          // object name 
  38.             );
  39.         [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
  40.         private static extern IntPtr CreateMutex(
  41.             IntPtr lpMutexAttributes, // SD 
  42.             int bInitialOwner,                       // initial owner 
  43.             string lpName                            // object name 
  44.             );
  45.     }

 

C#防止程序多次运行的实现与优化 在GoF(Gang of Four)所著的《设计模式:可复用面向对象软件的基础》中,单例模式被描述为:“确保一个类只有一个实例,并提供一个全局访问点。这个定义揭示了单例模式的两个核心职责:实例唯一性:在整个运行环境中,该类只能存在一个实例。全局访问能力:可以通过一个统一的方式访问该唯一实例。建议说明使用Lazy实现懒加载提升性能,避免不必要的资源占用显式释放资源在类中实现接口,释放非托管资源避免全局状态依赖。 阅读详情

相关推荐

R3LIVE 1.0 适配 Velodyne 16线雷达:3步配置解决150米漂移问题

本文详细解析了R3LIVE 1.0适配Velodyne 16线雷达时出现的150米漂移问题,并提供三步配置方案。通过调整雷达类型设置、运动补偿与时间对齐、视觉-激光联合优化等关键参数,有效解决了系统漂移问题,提升定位精度。适用于机器人定位与建图领域的开发者。

weixin_29054195的博客 268

C# 禁止程序重复启动

C# 禁止程序重复启动

浅尝辄止的博客 3182

GD32F103入门实践(一)配置环境,搭建工程模板,烧写程序

写在前面 本系列博客是我初学GD32F103的操作实录,我个人是个小白,在学习过程中真的也遇到了不少坑,因此我希望能记录下来,帮助到同样踩坑的你。 我的芯片是GD32F103ZE,软件是Keil,烧写用的是JLink。 材料准备 首先我在兆易创新官网(兆易创新),下载相关的文件。点击资料下载,在搜索框里输入“GD32F10”可以得到相关的资料,其他芯片类似。比较重要的是GD32F10x AddOn和GD32F10x Firmware Library(固件库),这两个必须下载。 下载Keil MDK5,这

qq_41208487的博客 3万+

C#禁止重复打开应用程序

##程序禁止重复打开 1.在窗体启动事件中Form1_Load(0中添加下列代码 #region 判断系统是否已启动 System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName("这里是你的程序进程名");//获取指定的进程名 if (myProcesses.Length > 1) //如果可以获取到知道的进程名则说明已经启动 { Mess

li937666的博客 1467

锐捷交换机配置SSH

锐捷交换机配置ssh 一、组网需求 通过ssh功能可以远程登录管理设备 二、配置步骤 全局开启ssh服务,并且指定ssh版本 Ruijie>enable Ruijie#configure terminal Ruijie(config)#enable service ssh-server ------>开启SSH服务,默认关闭 Ruijie(config)#ip ssh version 2 ------>默认1.99版本,设置为版本2 添加登

Loners_fan的博客 1万+

CREO5.0二次开发+VS2019配置详解

CREO5.0+VS2019配置更新 一、CREO5.0 配置 二、Visual Studio 2019配置 新建MFC DLL项目 文件>新建>项目,选择MFC DLL,如下图所示 项目名称CREO1 2、配置设置 打开项目属性: 配置资源管理器设置: 设置包含目录、库目录(根据自己CREO的安装位置来设置): 包含目录: 库目录: 预处理器设置: 把下面文字复...

liuyi2517的博客 1万+

C#如何防止程序多次运行的技巧

一、使用互斥量Mutex弄懂了主要的实现思路之后,下面看代码实现就完全不是问题了,使用互斥量的实现就是第四点的思路的体现,我们用为该程序进程创建一个互斥量Mutex对象变量,当运行该程序时,该程序进程就具有了这个互斥的Mutex变量,如果再次运行该程序时,通过检查该互斥变量是否存在(来替换检测这个进程是否存在),如果存在则说明程序已运行,否则就没运行。这里需要注意的是:从我的多线程同步的文章大家可...

weixin_33901641的博客 278

FT2004(D2000)开发实战之网口stmmac报错调试(Failed to reset the dma)

网口stmmac报错调试(Failed to reset the dma)

嵌入式Linux 3584

C#WinForm防止窗体多次打开,如果存在,则打开已在运行的程序

我们开发exe程序 当我们双击exe程序 会发现多次重复生成打开新窗体,我们看看微信 确实没有这个问题,始终只会显示一个,如果已登录,在双击直接显示主界面。

qq_42335551的博客 3629

手把手教你完成基于matlab的LSTM时间序列分析

时间序列是按时间顺序组织的数字序列,是数据分析中重要的处理对象之一。时间序列的主要特点是数据获取方式一般具有客观性,能反映某种现象的变化趋势或统计指标,进而预测未来走向,这在本质上也是一个回归预测的问题。长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络,适合处理有更长时间跨度的内部记忆,被广泛应用于时间序列分析,能够保持数据的内在持续性,反映数据的细粒度走势,具有良好的预测效果。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 896

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1446

C#中防止程序多次运行

C#中如何防止程序多次运行?只要在程序入口点函数Main()中的开始部分添加如注释部分的代码,就能快捷实现。 示例代码如下: usingSystem; usingSystem.Collections.Generic; usingSystem.Windows.Forms; namespaceWindowsApplication1 { stati...

diansangjia3779的博客 271

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

丨汀、的博客 5221

[C# 开发技巧]如何防止程序多次运行

[C# 开发技巧]如何防止程序多次运行 一、引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如:http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到同样问题的朋友有所参考的,同时也是对...

fgmah2000的博客 314

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C#如何防止程序多次运行的技巧(精典)(转)

C#如何防止程序多次运行的技巧(精典) 原文啰嗦,简练一下。 一、引言 1、当我们点击一个exe文件时,此时该exe程序将会运行(当我们点击exe之后,程序运行,系统会创建一个与与程序同名的进程) 2、从操作系统的角度来讲就是该程序的进程只能是唯一的,要保证该程序进程只有一个,如果操作系统没有运行该程序进程,则运行这个程序。 3、从而这个问题就转换为判断该程序进程的数量问题了,此时如果熟悉.NET类库的人肯定知道.NET类库中有一个Process类,该类的意思就是一个进程的抽象。可以用Proces

学习学习再学习 2159

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c# 防止程序多次运行

在c#项目的主入口点加入以下代码:using System.Diagnostics;using System.IO;        static void Main()        {            string MName = Process.GetCurrentProcess().MainModule.ModuleName;            string PName =

lisky119的专栏 773

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 买的两本书今天终于收到了,真的是“巨”著啊,厚达1500多页!!
下一篇: C#检测程序重复运行的函数(可以在多用户登录情况下检测)
lanman
博客等级 码龄25年 56粉丝 101原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值