zoukankan      html  css  js  c++  java
  • C#限制程序只能运行一個实例 (防多开)

    问题:控制台可以启动多个实例,有时候只想让单例运行,防止多个示例同时运行
    解决办法:方法二可以,亲测,方法一没测
    参考:https://www.cnblogs.com/longphui/p/4831491.html
    //方法一:只禁止多个进程运行
    
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace DuoYeMianIE
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                bool ret;
                System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
                if (ret)
                {
                    System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
                    System.Windows.Forms.Application.DoEvents();             //这两行实现   XP   可视风格   
                    System.Windows.Forms.Application.Run(new LamBrowser());
                    //   Main   为你程序的主窗体,如果是控制台程序不用这句   
                    mutex.ReleaseMutex();
                }
                else
                {
                    MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。
    
    这个程序即将退出。", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //   提示信息,可以删除。   
                    Application.Exit();//退出程序   
                }
            }
        }
    }
    复制代码
    复制代码
    复制代码
    复制代码
    //方法二:禁止多个进程运行,并当重复运行时激活以前的进程
    
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Reflection;
    
    namespace DuoYeMianIE
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
    {
        //Get   the   running   instance.   
        Process instance = RunningInstance();
        if (instance == null)
        { System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
            System.Windows.Forms.Application.DoEvents();
            //There   isn't   another   instance,   show   our   form.   
            System.Windows.Forms.Application.Run(new LamBrowser());
        }    
        else
        {
            //There   is   another   instance   of   this   process.   
            HandleRunningInstance(instance);
        }
    }
    
       
    public static Process RunningInstance()
    {
        
        Process current = Process.GetCurrentProcess();
        Process[] processes = Process.GetProcessesByName(current.ProcessName);
        //Loop   through   the   running   processes   in   with   the   same   name   
        foreach (Process process in processes)
        {
            //Ignore   the   current   process   
            if (process.Id != current.Id)
            {
                //Make   sure   that   the   process   is   running   from   the   exe   file.   
               
                if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
                {
                    //Return   the   other   process   instance.   
                    return process;
                }
            }
        }
        //No   other   instance   was   found,   return   null. 
        return null;
    }
    public static void HandleRunningInstance(Process instance)
    {
        //Make   sure   the   window   is   not   minimized   or   maximized   
        ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
        //Set   the   real   intance   to   foreground   window
        SetForegroundWindow(instance.MainWindowHandle);
    }
    [DllImport("User32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
    private const int WS_SHOWNORMAL = 1;
        }
    }
    复制代码
    复制代码
  • 相关阅读:
    UVA12125 March of the Penguins (最大流+拆点)
    UVA 1317 Concert Hall Scheduling(最小费用最大流)
    UVA10249 The Grand Dinner(最大流)
    UVA1349 Optimal Bus Route Design(KM最佳完美匹配)
    UVA1212 Duopoly(最大流最小割)
    UVA1395 Slim Span(kruskal)
    UVA1045 The Great Wall Game(二分图最佳匹配)
    UVA12168 Cat vs. Dog( 二分图最大独立集)
    hdu3488Tour(KM最佳完美匹配)
    UVA1345 Jamie's Contact Groups(最大流+二分)
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/9553862.html
Copyright © 2011-2022 走看看