• C#中解决PC端程序多开的问题


    简介

    防止PC端程序多开

    前言

    昨天,偶然从好朋友老王哪里得知,他的电脑居然可以同时上两个微信号。这倒是引起了我的好奇,他告诉我是这样做的,他写了一个批处理文件,

    1. TASKKILL /F/IM WeChat.exe
    2. start " " "E:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

    start " " "E:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

    Excel讲师

    Excel表格制作,数据处理,办公技巧发布与技术分享,办公快别人一步!

    4篇原创内容

    公众号

    然后直接双击批处理文件,果然能启动两个微信进程,我在想我们能不能把这样的漏洞补上呢, 所以我自己写了一个程序,首先我们要写程序之前要明白,怎么控制程序不能打开两次,做到系统级别的互斥, 可能好多同学说,线程同步问题我倒是随便解决,但是进程同步的问题该怎么解决呢,如果大家对基础比较熟悉的话,就会知道互斥锁Mutex能够解决这样的问题,我们看一下官方文档:

    我是这样理解的

    •initiallyOwned: 如果initiallyOwned为true,互斥锁的初始状态就是被所实例化的线程所获取,否则实例化的线程处于未获取状态。•name:该互斥锁的名字,在操作系统中只有一个命名为name的互斥锁mutex,如果一个线程得到这个name的互斥锁,其他线程就无法得到这个互斥锁了,必须等待那个线程对这个线程释放。•createNew:如果指定名称的互斥体已经存在就返回false,否则返回true。

    所以我在我写的demo程序的入口处。写了这样一段代码

    1.   bool mutexCreated;
    2.             var mutex = new Mutex(true"MyApp"out mutexCreated);
    3.             if (mutexCreated)
    4.             {
    5.                 Application.Run(new Form1());
    6.             }
    7.             else
    8.             {
    9.                 MessageBox.Show("该程序已打开");
    10.             }

    我们把程序生成,打开我们的程序两次,第一次能够正常打开,第二次就显示该程序已打开了,

    然后我们修改一下多开的批处理文件

    1. TASKKILL /F/IM WindowsFormsApp1.exe
    2. start " " "E:\02_blibli\wenz\32Mutex\WindowsFormsApp1\bin\Debug\WindowsFormsApp1.exe"
    3. start " " "E:\02_blibli\wenz\32Mutex\WindowsFormsApp1\bin\Debug\WindowsFormsApp1.exe"

    发现我们的程序还是只能打开一次,并不能多开,那微信为什么能多开呢?是微信的开发故意留的这样一个漏洞还是技术层面的呢?我还是想不通;但是从技术层面来说,他们有没有可能,是在启动程序的是时候去遍历的进程呢,由于两个程序打开时间间隔太短,以至于第一个程序还没有进程的时候,就打开第二个了,所以就能多开?我只能这样瞎猜,如果有知道的可以告诉我。

    我今天就给大家讲了使用互斥锁解决程序多开的问题!

  • 相关阅读:
    【数据结构】栈和队列
    JS下载链接的两种方式
    超声波功率放大器原理,安泰超声功率放大器在MEMS测试中的应用
    54.【system系统互动函数大总结】
    Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战
    多要素气象站:推动气象监测进入智能化新时代
    基于ROS的机器人模型建立及3D仿真【物理/机械意义】
    【21天算法学习】折半插入排序
    网络路径监控分析
    开启个推和关闭个推--SharePreferences使用
  • 原文地址:https://blog.csdn.net/biyusr/article/details/125613145