zoukankan      html  css  js  c++  java
  • 只运行一个exe应用程序的使用案例

    应用程序的exe启动设置

    using System;
    using System.Diagnostics;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Threading;
    using System.Windows.Forms;

    namespace OnlyRunOneEXE
    {
    static class Program
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    #region 第一种方式
    //if (IsExistRunApplicationOrEXE())
    //{
    // MessageBox.Show("软件已经在运行!!!", "信息提示:");
    // return;
    //}
    //else
    //{
    // Application.Run(new Form1());
    //}
    #endregion

    #region MyRegion

    Process process = RunningInstance();
    if (process != null)
    {
    //MessageBox.Show("软件已经在运行!!!", "信息提示:");
    HandleRunningInstance(process);
    }
    else
    {
    Application.Run(new Form1());
    }
    //Application.Run(new Form1());
    #endregion
    }

    #region 第一种方式
    public static bool IsExistRunApplicationOrEXE()
    {
    Mutex mutex = new Mutex(true, "OnlyRunOneEXE", out bool isCreatedNew);
    Process[] processArrs = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
    if (processArrs.Length > 2 || !isCreatedNew)
    {
    return true;
    }
    return false;
    }

    #endregion

    #region 第二种方式
    [DllImport("User32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);

    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)
    {
    ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
    SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
    }


    //[DllImport("User32.dll")]
    ////返回值:如果窗口原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。
    //private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    ////API cmdShow 常数定义
    //private const int SW_HIDE = 0;
    //private const int SW_NORMAL = 1; //正常弹出窗体
    //private const int SW_MAXIMIZE = 3; //最大化弹出窗体
    //private const int SW_SHOWNOACTIVATE = 4;
    //private const int SW_SHOW = 5;
    //private const int SW_MINIMIZE = 6;
    //private const int SW_RESTORE = 9;
    //private const int SW_SHOWDEFAULT = 10;
    #endregion
    }
    }

  • 相关阅读:
    关于读者来信的一些思考
    serializeArray()与serialize()的区别
    懒人代码-顶部栏
    $.ajax()方法详解
    JavaScript(js)对象常用操作,JS操作JSON总结
    js 获取手机浏览器类型,修改css文件的class的值
    阻止在极短的时间重复执行某个函数
    android WebViewClient和WebChromeClient
    java枚举使用详解
    android-async-http
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/8036308.html
Copyright © 2011-2022 走看看