zoukankan      html  css  js  c++  java
  • C#代码实现,确保windows程序只有一个实例(instance)

    static class Program
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    //防止程序多次运行
    if (!OneInstance.IsFirst("GetPayInfo"))
    {
    MessageBox.Show("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!", "程序错误提示:", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    return;
    }

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
    }
    }

    // ******************* 防止程序多次执行 **************************
    public abstract class OneInstance
    {
    ///<summary>
    ///判断程序是否正在运行
    ///</summary>
    ///<param name="appId">程序名称</param>
    ///<returns>如果程序是第一次运行返回True,否则返回False</returns>
    public static bool IsFirst(string appId)
    {
    bool ret = false;
    if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)
    {
    CreateMutex(IntPtr.Zero, 0, appId);
    ret = true;
    }
    return ret;
    }
    /// <summary>
    /// 为现有的一个已命名互斥体对象创建一个新句柄
    /// </summary>
    /// <param name="dwDesiredAccess"></param>
    /// <param name="bInheritHandle">如希望子进程能够继承句柄,则为TRUE</param>
    /// <param name="lpName">要打开对象的名字</param>
    /// <returns></returns>
    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr OpenMutex(
    uint dwDesiredAccess, // access
    int bInheritHandle, // inheritance option
    string lpName // object name
    );

    /// <summary>
    /// 找出当前系统是否已经存在指定进程的实例。
    /// 如果没有则创建一个互斥体。
    /// CreateMutex()函数可用来创建一个有名或无名的互斥量对象:
    /// </summary>
    /// <param name="lpMutexAttributes">指向安全属性的指针</param>
    /// <param name="bInitialOwner">初始化互斥对象的所有者</param>
    /// <param name="lpName">指向互斥对象名的指针</param>
    /// <returns></returns>
    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr CreateMutex(
    IntPtr lpMutexAttributes, // SD
    int bInitialOwner, // initial owner
    string lpName // object name
    );
    }

  • 相关阅读:
    给程序员献礼 各种各样漂亮的qq在线状态客服代码生成工具V6.0 支持的顶起来
    CMS系统遇挂马,送大家个木马监控软件来解决问题!
    pgpoolII的性能缺陷
    socket通信,server与多客户端通信(二)
    对pgpooII的pool_process_context的 proc_id 的理解
    C语言 对Ctrl+C 的处理
    pgpoolII 的health_check_period 和 health_check_timeout
    pgpoolII的性能缺陷(二)
    模仿pgpoolII的方式,建立线程池
    pgpoolII中是如何实现进程池的
  • 原文地址:https://www.cnblogs.com/eric-xiongzw/p/3554553.html
Copyright © 2011-2022 走看看