gpt4 book ai didi

基于C#的应用程序单例唯一运行的完美解决方案-开源研究系列文章

转载 作者:我是一只小鸟 更新时间:2023-08-04 14:31:39 32 4
gpt4 key购买 nike

  今次介绍一个应用程序单例唯一运行方案的代码.

  我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来,需要的读者请自己复用该代码到自己的项目中即可.

  1、  项目目录; 。

  下面是项目目录,因为是一段代码,所以给出的例子比较简单.

         。

  。

  2、  代码介绍; 。

  这里的代码挺简单的,就是获取应用程序的GUID和运行的进程进行判断,因为GUID唯一,所以更改了程序名称或者改变了目录都不会有影响;而运行进程判断是附加的方式,防止当前目录的程序运行多次.

                          
                             1
                          
                          
                            namespace
                          
                          
                             ProgramInstance

                          
                          
                             2
                          
                          
                            {

                          
                          
                             3
                          
                          
                            using
                          
                          
                             System;

                          
                          
                             4
                          
                          
                            using
                          
                          
                             System.Diagnostics;

                          
                          
                             5
                          
                          
                            using
                          
                          
                             System.Reflection;

                          
                          
                             6
                          
                          
                            using
                          
                          
                             System.Runtime.InteropServices;

                          
                          
                             7
                          
                          
                            using
                          
                          
                             System.Threading;

                          
                          
                             8
                          
                          
                             9
                          
                          
                            10
                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            11
                          
                          
                            ///
                          
                          
                             单例程序操作类

                          
                          
                            12
                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            13
                          
                          
                            internal
                          
                          
                            class
                          
                          
                             SingleInstance

                          
                          
                            14
                          
                          
                                {

                          
                          
                            15
                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            16
                          
                          
                            ///
                          
                          
                             程序是否运行

                          
                          
                            17
                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            18
                          
                          
                            ///
                          
                          
                            <returns>
                          
                          
                            true 程序已运行;false 程序未运行
                          
                          
                            </returns>
                          
                          
                            19
                          
                          
                            internal
                          
                          
                            static
                          
                          
                            bool
                          
                           IsRunning(
                          
                            out
                          
                          
                             Process process)

                          
                          
                            20
                          
                          
                                    {

                          
                          
                            21
                          
                          
                            //
                          
                          
                            如果判断全系统唯一,直接用下列方法;如果判断当前文件夹唯一,则将GUID判断去掉;
                          
                          
                            22
                          
                          
                            new
                          
                           Mutex(
                          
                            true
                          
                          , 
                          
new Guid(((GuidAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
typeof (GuidAttribute))).Value).ToString( " N " ),
out bool createdNew); 23 process = RunningInstance(); 24 return (!createdNew || (process != null )); 25 } 26 /// <summary> 27 /// 获取当前程序进程实例 28 /// </summary> 29 /// <returns> 程序进程实例 </returns> 30 private static Process RunningInstance() 31 { 32 Process currentProcess = Process.GetCurrentProcess(); 33 foreach (Process process in Process.GetProcessesByName(currentProcess.ProcessName)) 34 { 35 if ((process.Id != currentProcess.Id) &&
              (Assembly.GetExecutingAssembly().Location.Replace( " / " , @" \ " ) == currentProcess.MainModule.FileName)) 36 { 37 return process; 38 } 39 } 40 return null ; 41 } 42 } 43 }

  。

                          
                             1
                          
                          
                            namespace
                          
                          
                             SingleInstance

                          
                          
                             2
                          
                          
                            {

                          
                          
                             3
                          
                          
                            using
                          
                          
                             System;

                          
                          
                             4
                          
                          
                            using
                          
                          
                             System.Diagnostics;

                          
                          
                             5
                          
                          
                            using
                          
                          
                             System.Runtime.InteropServices;

                          
                          
                             6
                          
                          
                            using
                          
                          
                             System.Windows.Forms;

                          
                          
                             7
                          
                          
                             8
                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                             9
                          
                          
                            ///
                          
                          
                             程序类

                          
                          
                            10
                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            11
                          
                          
                            internal
                          
                          
                            static
                          
                          
                            class
                          
                          
                             Program

                          
                          
                            12
                          
                          
                                {

                          
                          
                            13
                          
                                   [DllImport(
                          
                            "
                          
                          
                            User32.dll
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            14
                          
                          
                            private
                          
                          
                            static
                          
                          
                            extern
                          
                          
                            bool
                          
                          
                             SetForegroundWindow(IntPtr hWnd);

                          
                          
                            15
                          
                                   [DllImport(
                          
                            "
                          
                          
                            User32.dll
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            16
                          
                          
                            private
                          
                          
                            static
                          
                          
                            extern
                          
                          
                            bool
                          
                           ShowWindowAsync(IntPtr hWnd, 
                          
                            int
                          
                          
                             cmdShow);

                          
                          
                            17
                          
                          
                            18
                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            19
                          
                          
                            ///
                          
                          
                             应用程序的主入口点

                          
                          
                            20
                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            21
                          
                          
                                    [STAThread]

                          
                          
                            22
                          
                          
                            static
                          
                          
                            void
                          
                          
                             Main()

                          
                          
                            23
                          
                          
                                    {

                          
                          
                            24
                          
                          
                            if
                          
                           (ProgramInstance.SingleInstance.IsRunning(
                          
                            out
                          
                          
                             Process process))

                          
                          
                            25
                          
                          
                                        {

                          
                          
                            26
                          
                                           ShowWindowAsync(process.MainWindowHandle, 
                          
                            9
                          
                           | 
                          
                            1
                          
                          
                            );

                          
                          
                            27
                          
                          
                                            SetForegroundWindow(process.MainWindowHandle);

                          
                          
                            28
                          
                          
                            29
                          
                          
                            return
                          
                          
                            ;

                          
                          
                            30
                          
                          
                                        }

                          
                          
                            31
                          
                          
                            32
                          
                          
                            33
                          
                          
                                        Application.EnableVisualStyles();

                          
                          
                            34
                          
                                       Application.SetCompatibleTextRenderingDefault(
                          
                            false
                          
                          
                            );

                          
                          
                            35
                          
                          
                            36
                          
                                       Application.Run(
                          
                            new
                          
                          
                             Form1());

                          
                          
                            37
                          
                          
                                    }

                          
                          
                            38
                          
                          
                                }

                          
                          
                            39
                          
                           }
                        

  3、  运行截图; 。

  因为是代码段复用,所以这里不提供运行截图了.

  。

  4、  源码下载; 。

  需要该例子代码的,请移步到下面链接进行下载:

  https://download.csdn.net/download/lzhdim/88158095 。

  。

  上面介绍了C#编写的应用程序单例运行的例子,希望对有该需求的读者以帮助。后面会将笔者认为有用的代码段共享出来,让需要的读者进行代码段复用.

  。

  注: 如果需要应用程序多开(放到其它文件夹中,或者在当前文件夹中复制更改应用程序名称),请将GUID的判断去掉即可.

最后此篇关于基于C#的应用程序单例唯一运行的完美解决方案-开源研究系列文章的文章就讲到这里了,如果你想了解更多关于基于C#的应用程序单例唯一运行的完美解决方案-开源研究系列文章的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com