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
    );
    }

  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/eric-xiongzw/p/3554553.html
Copyright © 2011-2022 走看看