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

  • 相关阅读:
    mockm remote 不能正常使用的解决方案
    uviewui 的 bug 当 url 的 query 参数中有 http://127.0.0.1/ 并且省略请求前缀的时候, 就会导致请求无法发送出去
    检查 nodmeon 是否可以修改文件后重启应用
    mocha 如何延迟指定时间后再运行所有用例
    使用 babel 编译 js 为 es5 支持 ie
    git 摘取提交
    Makefile学习笔记
    使用 Service Worker 缓解网站 DDOS 攻击
    如何热更新长缓存的 HTTP 资源
    网站图片无缝兼容 WebP/AVIF
  • 原文地址:https://www.cnblogs.com/eric-xiongzw/p/3554553.html
Copyright © 2020-2023  润新知