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