Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c# WinFo判断当前程序是否已经启动或存在的几种方式

c# WinFo判断当前程序是否已经启动或存在的几种方式

作者头像
纯粹是糖
发布于 2018-04-16 09:30:04
发布于 2018-04-16 09:30:04
1.3K00
代码可运行
举报
文章被收录于专栏:kwcodekwcode
运行总次数:0
代码可运行

第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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);//退出程序  
            } 
        }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C# WinForm程序禁止同时打开多个客户端
在C# WinForm应用程序开发过程中,有时我们需要确保程序在运行时,不允许同时打开多个客户端实例。这一需求在很多场景下都非常重要,比如一些系统级工具软件,多实例运行可能会导致资源竞争、数据不一致等问题。本文将详细介绍如何在C# WinForm中实现禁止同时打开多个客户端的功能。
郑子铭
2025/03/27
1600
C# WinForm程序禁止同时打开多个客户端
[C# 开发技巧]如何防止程序多次运行
最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到同样问题的朋友有所参考的,同时也是对自己的一个积累。在介绍具体实现代码之前,我们必须明确解决这个问题的思路是什么的?下面只要分享我的一个思考的这个问题的方式:
乔达摩@嘿
2020/09/11
2.2K0
[C# 开发技巧]如何防止程序多次运行
.NET桌面应用保持程序唯一性打开的一种方式
在开发桌面应用程序时,可能会遇到这样一种需求:限制程序只能同时运行一个实例。如果用户试图再次启动同一个程序,应该将已经运行的程序窗口置于前台而不是启动一个新实例。这篇文章提供了一种通过检测当前程序实例并激活已运行实例的方法。
郑子铭
2025/01/02
1140
.NET桌面应用保持程序唯一性打开的一种方式
WPF程序开发-保证程序启动唯一
前言 要保证程序唯一,有两种方式 新程序启动时发现已启动就自动退出 新程序启动发现已启动关闭之前的程序 关闭新进程 根据进程 protected override void OnStartup(StartupEventArgs e) { checkProcess(); } private void checkProcess() { Console.WriteLine("程序启动"); //获取欲启动进程名 string ProcessName = Process.GetCu
码客说
2021/11/29
7910
c# 控制职能运行单一实例,再次运行显示已经运行的实例
有这么个需求,软件只能运行一个实例,软件运行后可以让其隐藏运行 再次运行这个软件的时候就让正在运行的实例显示出来 ================================= 当软件隐藏后没办法拿到句柄 于是只有第一次运行的时候讲句柄保存下来,于是有了下面的 1 private void HideForm() 2 { 3 string handlestr = System.Diagnostics.Process.GetCurrentProcess().M
冰封一夏
2019/09/11
6870
C#几行代码干掉一台电脑[无限弹窗]
注意一定要把Application.Run(new Form1());这行代码删除或注释掉 原理:用一个while(true)无限循环来创建窗体对象,对象名.Show()方法不断地打开窗体
A-My
2022/09/19
5940
利用c#制作托盘程序,并禁止多个应用实例运行
托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程序最小化到系统托盘上 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {     //MessageBox.Show("程序将最小化到系统托盘区");     e.Cancel = true; // 取消关闭窗体      this.Hide();
菩提树下的杨过
2018/01/22
1.4K0
WinForm单例模式启动主窗体
static class Program     {         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()         {             Application.EnableVisualStyles();             Application.Set
跟着阿笨一起玩NET
2018/09/18
1.5K1
C#多线程(4):进程同步Mutex类
Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。
痴者工良
2021/04/26
1.3K0
C#将引用的dll嵌入到exe文件中
4.实现如下代码, 在窗口构造中实现也可以(在窗体事件中无效,如winform_load)
zls365
2020/08/19
4.4K0
C# WinForm捕获全局异常
static class Program      {          /// <summary>          /// 应用程序的主入口点。          /// </summary>          [STAThread]          static void Main()          {              try              {                  //设置应用程序处理异常方式:ThreadException处理             
跟着阿笨一起玩NET
2018/09/18
2.4K0
C# WinForm捕获全局异常
CLR查找和加载程序集的方式(一)
  C#开发者在开发WinForm程序、Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集,
张传宁IT讲堂
2019/09/17
2K0
CLR查找和加载程序集的方式(一)
Winform 如何使用Abp
Winform 如何使用Abp 安装 Volo.Abp.Core Install-Package Volo.Abp.Core -Version 4.4.4 创建模块和应用 // 创建模块(具体用途暂时不管) // 一个继承自 AbpModule 的类 public class AppModule : AbpModule { } // 使用 AbpApplicationFactory 创建一个应用 var app = AbpApplicationFactory.Create<AppModule>();
冬夜先生
2021/12/05
1.9K0
C#程序防多开又一法
在Main()方法开始时遍历所有进程,获取每个进程的程序集GUID和PID,若发现有跟自己GUID相同且PID不同的进程,就勒令自身退出。
AhDung
2018/09/13
1.1K0
Winform 登录界面的处理
在编写项目中可能会遇到一个场景就是,先进行登录,登录成功后在进入主界面,这里我们需要将主界面放入Run方法中,让主界面作为主线程界面显示。
MaybeHC
2024/04/23
2240
C# WinForm实现自动更新程序之客户端的示例代码
/// The main entry point for the application.
用户7718188
2022/11/06
1K0
c#线程-线程同步
如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏。如果多个线程不会同时访问共享数据,可以不用线程同步。 线程同步也会有一些问题存在: 1、性能损耗。获取,释放锁,线程上下文建切换都是耗性能的。 2、同步会使线程排队等待执行。
苏州程序大白
2021/08/13
8070
C# 实现登录并跳转界面
Program.cs文件添加如下内容 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Login()); Login login = new Login(); //界面转换 login.Sho
landv
2018/11/08
2.6K0
C#的GUI 应用程序开发
图形用户界面(GUI)应用程序是与用户交互的直观方式。在C#中,有多种工具和框架可用于创建GUI应用程序,包括Windows Presentation Foundation (WPF)、Windows Forms和Universal Windows Platform (UWP)。本文将深入探讨这些框架的核心概念、特点、使用场景及如何使用它们来构建GUI应用程序。
Michel_Rolle
2024/10/09
2.9K0
winform运行时如何接受参数?(示例)
关键是在Main函数中处理,示例如下 using System; using System.Collections.Generic; using System.Windows.Forms; namespace WinFormTest {     static class Program     {         /// <summary>         /// 应用程序的主入口点。         /// </summary>         [STAThread]        
菩提树下的杨过
2018/01/22
1.2K0
相关推荐
C# WinForm程序禁止同时打开多个客户端
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验