读书人

C#只起步一个进程

发布时间: 2013-01-23 10:44:50 作者: rapoo

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)                    {                        //这里表示是重复的进程                        }

读书人网 >C#

热点推荐