以下方法转自网络

Code
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;

namespace WinFormStudy
{
    static class Program
    {

/// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Process instance = RunningInstance();
            if (instance == null)
            {
                //没有实例在运行
                Application.Run(new Form1());
            }
            else
            {
                //已经有一个实例在运行
                HandleRunningInstance(instance);
            }
        }
        #region  确保程序只运行一个实例
        private static Process RunningInstance()
        {
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName(current.ProcessName);
            //遍历与当前进程名称相同的进程列表  
            foreach (Process process in processes)
            {
                //如果实例已经存在则忽略当前进程  
                if (process.Id != current.Id)
                {
                    //保证要打开的进程同已经存在的进程来自同一文件路径
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    {
                        //返回已经存在的进程
                        return process;
                        
                    }
                }
            }
            return null;
        }

private static void HandleRunningInstance(Process instance)
        {
            MessageBox.Show("已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            ShowWindowAsync(instance.MainWindowHandle, 1);  //调用api函数,正常显示窗口
            SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
        }
        [DllImport("User32.dll")]
        private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
        [DllImport("User32.dll")]
        private static extern bool SetForegroundWindow(System.IntPtr hWnd);
        #endregion
    }
}

或者

Code
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WinFormStudy
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool ret;
            System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out   ret);
            if (ret)
            {
                System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
                System.Windows.Forms.Application.DoEvents();   
                System.Windows.Forms.Application.Run(new Form1());
                //  frmMain   为你程序的主窗体,如果是控制台程序不用这句   
                m.ReleaseMutex();
            }
            else
            {
                MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n这个程序即将退出。", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                // 提示信息,可以删除。   
                Application.Exit();//退出程序   
            }
        }
    }
}

转载于:https://www.cnblogs.com/freeliver54/archive/2008/11/22/1338816.html

C# WinForm 只运行一个程序实例相关推荐

  1. C# 只允许运行一个程序实例

    using System; using System.Windows.Forms; using System.Runtime.InteropServices;//使用DllImport的必须. usi ...

  2. C# WinForm只允许运行一个窗体实例

    大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...

  3. 转:让程序只运行一个实例的四种方法

    先留着以后有用. 让程序只运行一个实例的四种方法 综述:让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果 ...

  4. 只运行一个实例的方法

    在VC++ 中编程中,只运行一个实例的方法主要有两类: 1 遍历当前的所有窗口,查找相同的实例.为了便于查找,一般要事先设一个查找标志. 2 利用系统提供的互斥对象或信标,直接让系统抑制重复的实例. ...

  5. 开发中常用的只允许一个程序运行的办法createmutex

    //开发中常用的只允许一个程序运行的办法//程序以单例模式运行 常用办法,创建一个互斥量 //由于互斥量只允许一个进程或者线程占用 会创建失败,利用这个特性可以做到单例运行改程序 #include & ...

  6. 为什么建议一个容器中只运行一个进程

    文章首发于:https://www.cnblogs.com/JasonCeng/p/14814888.html 在云原生与容器化时代浪潮下,大多数新手的普遍认识是"容器=虚拟机", ...

  7. 只缺一个程序员 如何让产品实现

    2019独角兽企业重金招聘Python工程师标准>>> 译者:王登科 这是一篇我的翻译,来自Derek Sivers的How to hire a programmer to make ...

  8. 同一个PC只能运行一个应用实例(考虑多个用户会话情况)

    原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) 1 class Program 2 { 3 private static Mutex m; 4 5 [STAThread] 6 stati ...

  9. 在OpenEIM中每运行一个程序

    在OpenEIM中每运行一个程序,系统资源就会减少.有的程序会消耗大量的系统资源,即使把资源关闭,在内存中还是有一些没有的DLL文件在运行,这样就便得系统的运行速度下降,甚至出现上述问题. 我们可以通 ...

  10. “只差一个程序员”这句话还能说多少年?

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:"只差一个程序员"这句话还能说多少年? 这句话一般出现在非技术创始人在招募技术合伙人的时候,而且多是创始团 ...

最新文章

  1. python的闭包函数
  2. *30.什么是微内核
  3. Linux 文件系统概述
  4. 技术干货 | 高性能短链设计与实现
  5. 南京信息工程大学c语言真题,南京信息工程大学C语言试题库.doc
  6. 列表_月隐学python第6课
  7. linux钟java运行命令,在java中运行linux命令
  8. 前端js判空处理,js字符串判空,js数组判空
  9. 监听文件变化并自动运行 npm script
  10. C++创建动态链接库(*.dll)
  11. SAS接口互连完全指南
  12. 【转载】素数快速打表(据说是线性复杂度)
  13. poj3667 hotel
  14. paip.陕北方言 广东方言的不同单字 1千高频字
  15. 单片机开发,stm32开发,串口下载软件,flymcu
  16. revit二次开发 材质类别分析
  17. 这群人,用8年讲述体育能有多迷人
  18. office2007无法使用宏的解决方法
  19. CrazyTalk 8 中文版 照片会说话动画制作 带动作脚本 点头眨眼动画制作
  20. 【论文阅读】Improving Document-level Relation Extraction via Contextualizing Mention Representations and W

热门文章

  1. ps人像精修照片步骤_PS人像精修
  2. pytorch查看模型weight与grad
  3. 国产操作系统剽窃Linux内核可耻!
  4. [转载]从零开始学习OpenGL ES之五 – 材质
  5. 在地图上点击一下,在图层上画一个点,并显示相关的信息
  6. 关于 System.getProperty
  7. Xcode12.3 、12.4 运行 iOS15 :The code signature version is no longer supported
  8. 你家的APS系统有这些功能吗?排程系统功能盘点
  9. Java基础93 JDBC连接MySQL数据库
  10. 035 spring amqp