保证程序只有一个实例运行并且先将旧实例关闭再运行新实例

using System.Collections.Generic;

using System.Windows.Forms;

using System.Threading;

using System.Diagnostics;

using System.Reflection;

namespace MyClient

{

    

    static class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]

        static void Main(string[] args)

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            //bool blnCreate;//Another method to make sure only one instance

            //Mutex m = new Mutex(true, “MyClient”, out blnCreate);

            //if (blnCreate)

            CloseRunningInstance();

            Application.Run(new MainFrm());

        }

        //Close the existed instance of my application

        static void CloseRunningInstance()

        {

            Process current = Process.GetCurrentProcess();

            Process[] processes = Process.GetProcessesByName(current.ProcessName);

            //Loop through the running processes in with the same name    

            foreach (Process process in processes)

            {

                //Ignore the current process    

                if (process.Id != current.Id)

                {

                    //Make sure that the process is running from the exe file.    

                    if (Assembly.GetExecutingAssembly().Location.Replace("/""\"== current.MainModule.FileName)

                    {

                        //Close the other process instance.   

                        process.Kill();

                        process.WaitForExit();

                    }

                }

            }

        } 

    }

}

[温馨提示]:该文章由原博客园导入而来,如排版效果不佳,请移步:http://www.cnblogs.com/coderzh/archive/2007/12/10/989375.html

微信扫一扫交流

作者:CoderZh
微信关注:hacker-thinking (程序员思考者)
本文出处:https://blog.coderzh.com/2007/12/10/989375/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。