日期:2014-05-17  浏览次数:20792 次

C#只启动一个进程

保证软件只运行一次还是很有必要的,方法也很简单,只要判断进程中有无当前的进程名就可以了。
对于WPF的软件,在App.XAML.cs中判断。重写OnStartup方法就可以了。

  public partial class App : Application
    {
        /// <summary>
        /// 只打开一个进程
        /// </summary>
        /// <param name="e"></param>
        protected override void OnStartup(StartupEventArgs e)
        {
            Process currentProcess = Process.GetCurrentProcess();

            foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))
            {
                if (item.Id != currentProcess.Id && 
                (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)
                {
                    item.Kill();

                    item.WaitForExit();

                    break;
                }
            }

            base.OnStartup(e);
        }
    }

对于Winform的则直接在主窗体的构造其中判断。

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            StartUp();
        }

        private void StartUp()
        {
            Process currentProcess = Process.GetCurrentProcess();

            foreach (Process item in Process.GetProcessesByName(currentProcess.ProcessName))
            {
                if (item.Id != currentProcess.Id && 
                (item.StartTime - currentProcess.StartTime).TotalMilliseconds <= 0)
                {
                    item.Kill();

                    item.WaitForExit();

                    break;
                }
            }
        }
    }

简单的代码就可以完成这个功能。

代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5000880

追加部分:

如果想做的更严格一些,可以根据进程名的路径来判断:

                    Process[] sameProcess = Process.GetProcessesByName
                        (Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.BaseDirectory + currentProcess.ProcessName));
                    if (sameProcess != null && sameProcess.Length > 0)
                    {
                        //这里表示是重复的进程
                        }