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

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Runtime.InteropServices;
     4 using System.Windows.Forms;
     5 
     6 namespace Test
     7 {
     8     static class Program
     9     {
    10         /// <summary>
    11         /// 应用程序的主入口点。
    12         /// </summary>
    13         [STAThread]
    14         static void Main()
    15         {
    16 
    17             //防止程序多次运行
    18             if (!OneInStance.IsFirst("GetPayInfo"))
    19             {
    20                 MessageBox.Show("警告:程序正在运行中! 请不要重复打开程序!", "程序错误提示:", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    21                 return;
    22             }
    23 
    24             Application.EnableVisualStyles();
    25             Application.SetCompatibleTextRenderingDefault(false);
    26             Application.Run(new Form1());
    27         }
    28     }
    29 
    30     //---------防止程序多次运行----------//
    31     public abstract class OneInStance
    32     {
    33         /// <summary>
    34         /// 判断程序是否正在运行
    35         /// </summary>
    36         /// <param name="appld">程序名称</param>
    37         /// <returns>如果程序第一次运行返回TRUE否则返回False</returns>
    38         public static bool IsFirst(string appId)
    39         {
    40             bool ret = false;
    41 
    42             if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)
    43             {
    44                 CreateMutex(IntPtr.Zero, 0, appId);
    45                 ret = true;
    46             }
    47 
    48             return ret;
    49         }
    50 
    51         /// <summary>
    52         /// 为现有的一个已命名互斥体对象创建一个新句柄
    53         /// </summary>
    54         /// <param name="dwDesiredAccess"></param>
    55         /// <param name="bInheritHandle">如希望子进程能够继承句柄,则为TRUE</param>
    56         /// <param name="lpName">要打开对象的名字</param>
    57         /// <returns></returns>
    58         [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    59         private static extern IntPtr OpenMutex(
    60             uint dwDesiredAccess, // access
    61             int bInheritHandle, // inheritance option
    62             string lpName // object name
    63         );
    64 
    65         /// <summary>
    66         /// 找出当前系统是否已经存在指定进程的实例。
    67         /// 如果没有则创建一个互斥体。
    68         /// CreateMutex()函数可用来创建一个有名或无名的互斥量对象:
    69         /// </summary>
    70         /// <param name="lpMutexAttributes">指向安全属性的指针</param>
    71         /// <param name="bInitialOwner">初始化互斥对象的所有者</param>
    72         /// <param name="lpName">指向互斥对象名的指针</param>
    73         /// <returns></returns>
    74         [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    75         private static extern IntPtr CreateMutex(
    76         IntPtr lpMutexAttributes, // SD
    77         int bInitialOwner, // initial owner
    78         string lpName // object name
    79         );
    80     }
    81 }
  • 相关阅读:
    机器学习十讲----第五讲
    Python数据挖掘学习进度06(numpy基本操作2、数组间运算)
    深度学习进度02(图和tensorboard、op、会话、张量)
    机器学习十讲----第四讲
    机器学习十讲----第三讲
    机器学习十讲----第二讲
    元胞自动机
    RuntimeError: The Session graph is empty. Add operations to the graph before calling run().解决方法
    Python数据挖掘学习进度05(numpy基本操作)
    深度学习进度01(深度和机器的区别、tensorflow的使用-tf数据流图)
  • 原文地址:https://www.cnblogs.com/haibing0107/p/8086126.html
Copyright © 2011-2022 走看看