使用DLL调用防止程序多次运行的实例程序

一、命名空间namespace

  命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间,命名空间的好处是:1、避免名字冲突,2、便于查找类型名字。

1、定义命名空间

  命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称

2、使用命名空间

  using 关键字表明程序使用的是给定命名空间中的名称。

3、嵌套命名空间

  命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间。您可以使用点(.)运算符访问嵌套的命名空间的成员。

二、C#如何防止程序多次运行的技巧

  直接判断程序进程是否存在。

  • 获取正在运行的程序,没有运行的程序则返回MutexKey.None
  • 根据当前进程的进程名获得进程集合,如果进程ID不等于当前运行进程的ID以及运行进程的文件路径等于当前进程的文件路径,则说明同一个该程序已经运行了,此时将返回MutexKey.ProcessControl
  • 比较返回值,如果=MutexKey.ProcessControl,表示重复运行。

三、C# DLL(程序集)的生成和调用

  • 1.利用C#准备一个.cs文件;
  • 2.开始菜单->Visual Studio 2015->VS2015 开发人员命令提示;
  • 3.输入csc /t:library /out:D:\myprog\Environment1\Environment1\My_PublicClass.dll D:\myprog\Environment1\Environment1\My_PublicClass.cs
      注解:
  • 1)library:意思是编译成类库,否则必须有Main();
  • 2)/out:D:\myprog\Environment1\Environment1\My_PublicClass.dll:输出文件的位置和名称;
  • 3)D:\myprog\Environment1\Environment1\My_PublicClass.cs:源文件的位置和名称;

四、实例程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.InteropServices; 

namespace My_PublicClass
{ 
        #region 系统显示错误信息
        public static class ShowMessage
        {
             public static void Error(String title,String infor)
            {
                MessageBox.Show( title,infor, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #region 判断系统是否已启动类MutexManager
        public static class MutexManager
        {
            
            public enum MutexKey
            {
                None = 0,
                Error = 1,
                ProcessControl = 2,
                Vision = 3,
            }
 
            public static string GetMutexDescriptor(MutexKey key)
            {
                return ("MutexManager描述");
            }
            public static MutexKey Register(MutexKey key)
            {
              // 获取当前活动的进程  
              Process currentProcess = Process.GetCurrentProcess();  
  
              // 根据当前进程的进程名获得进程集合  
              // 如果该程序运行,进程的数量大于1  
              Process[] processcollection = Process.GetProcessesByName(currentProcess.ProcessName.Replace(".vshost", ""));  
              foreach (Process process in processcollection)  
             {  
              // 如果进程ID不等于当前运行进程的ID以及运行进程的文件路径等于当前进程的文件路径  
               // 则说明同一个该程序已经运行了,此时将返回已经运行的进程  
               if (process.Id != currentProcess.Id)  
               {  
                 if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == process.MainModule.FileName)  
                 {  
                   return  MutexKey.ProcessControl;
                  }  
                }  
               }  
  
               return MutexKey.None; 
   
            }
            public static void Release(MutexKey key)
            {
                return;
            }

        }
        #endregion
  
}

五、参考资料

1、https://www.runoob.com/csharp/csharp-namespace.html
2、null的博客(https://www.cnblogs.com/feiyuhuo/p/5821727.html)
3、取名字脑壳疼的博客(https://www.cnblogs.com/w54255787/p/10012702.html)

六、源程序下载

1、dalong10的下载(https://download.csdn.net/download/dalong10/12697518)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值