C#只启动一个进程

时间:2022-06-01 16:49:40

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