日期:2014-05-17 浏览次数:21043 次
保证软件只运行一次还是很有必要的,方法也很简单,只要判断进程中有无当前的进程名就可以了。
对于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)
                    {
                        //这里表示是重复的进程
                        }