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

using System;
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();
                    }
                }
            }
        } 
    }
}
posted @ 2007-12-10 14:03  CoderZh  阅读(927)  评论(2编辑  收藏  举报