当前位置: 首页 > news >正文

C# 禁止windows程序重复运行的两种基本方法

一般的如果运行一个软件、让他处于运行状态,然后我们再去打开这个程序时就会提示我们
“程序已启动或者不能重复启动此程序”,比如QQ对战平台 ,就限制一台机子启动两个QQ对
战平台,那么他在C#中是如何实现的呢?

一般有两种方法,我是用的是第一种

方法1:

在项目的第一个窗体的启动事件中 如form1_load() 中添加如下语句
=================================这是什么分割线====================================

     #region 判断系统是否已启动

     System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName("这里是你的程序进程名");//获取指定的进程名  
            if (myProcesses.Length > 1) //如果可以获取到知道的进程名则说明已经启动
            {
                MessageBox.Show("程序已启动!");
                Application.Exit();              //关闭系统
            }          

    #endregion
===================================================================================
       好了 这样就可以达到防止用户第二次启动此程序的目的了
       当然你也可以把它编辑成一个类 或生成一个dll文件 调用它。


方法2.

在项目的启动引导文件 Program.cs中加入判断语句

====================================这是什么分割线===============================

using System.Linq;
       using System.Windows.Forms;

namespace XiaoZhiSoft
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool isRuned;
            System.Threading.Mutex mutex = new System.Threading.Mutex(true, "OnlyRunOneInstance", out isRuned);
            if (isRuned)
            {

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
                mutex.ReleaseMutex();
            }
            else
            {
                MessageBox.Show("程序已启动!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}

=============================================================================
在C#中这两出代码都可以实现防止程序重复运行的目的,在vs2005 vs2008 测试通过!

转载于:https://www.cnblogs.com/panshengqiang/archive/2013/01/17/2864595.html

相关文章:

  • 代码动态设置edittext输入类型为密码类型
  • 用ASDF来组织Lisp程序编译和加载
  • TensorFlow与OpenCV,读取图片,进行简单操作并显示
  • 移动终端开发必备知识
  • MAC配置环境变量
  • oracle的nvl和sql server的isnull
  • UTC时间与当地时间的转换关系?
  • oracle分页查询
  • 做项目学习Django2.0开发
  • [转]虚拟机下Ubuntu共享主机文件(Ubuntu、VMware、共享)
  • js中clientHeight,offsetHeight,scrollHeight的区别
  • Range Slider With Progress
  • nohup命令
  • 优先级队列PriorityBlockingQueue
  • Webservice工作原理及实例
  • 自己简单写的 事件订阅机制
  • angular2开源库收集
  • git 常用命令
  • JavaScript标准库系列——Math对象和Date对象(二)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PHP面试之三:MySQL数据库
  • php中curl和soap方式请求服务超时问题
  • Rancher-k8s加速安装文档
  • 动态规划入门(以爬楼梯为例)
  • 分布式事物理论与实践
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 2017年360最后一道编程题
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 进程与线程(三)——进程/线程间通信
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • "无招胜有招"nbsp;史上最全的互…
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (翻译)terry crowley: 写给程序员
  • (十) 初识 Docker file
  • (十)c52学习之旅-定时器实验
  • (一)认识微服务
  • (转)程序员技术练级攻略
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ./configure,make,make install的作用(转)
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net CF下精确的计时器
  • .Net 代码性能 - (1)
  • .Net 垃圾回收机制原理(二)
  • .net 验证控件和javaScript的冲突问题
  • .net程序集学习心得
  • .net开发引用程序集提示没有强名称的解决办法
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @Valid和@NotNull字段校验使用
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [.net]官方水晶报表的使用以演示下载