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