使用 Process.GetProcessesByName
方法来检查当前程序是否已经启动,可以按照如下步骤进行:
- 首先,获取当前运行的进程名称。
- 使用
Process.GetProcessesByName
方法查找与当前进程名称相同的所有进程。 - 判断返回的进程数组长度,如果大于1,则表示当前程序已经有一个实例在运行。
以下是一个示例代码片段,展示了如何实现这一点:
if (Comm.CheckCanStart()) //检查单实例
{
//工具库Log4Net和注册检查
LogHelper.WorkAndInfo($"----------------------Header--------------------------");
LogHelper.WorkAndInfo($"系统启动");
//系统初始化,开启后台线程
//。。。。。。
//系统退出时,关闭后台线程
//Project.Instance.Exit();
LogHelper.WorkAndInfo("系统关闭");
LogHelper.WorkAndInfo($"----------------------Footer--------------------------");
}
else
{
LogHelper.Info($@"当前检测到已经运行的{Process.GetCurrentProcess().ProcessName}
PID {Process.GetCurrentProcess().Id},显示已有进程!");
Comm.ShowRunningInstance(Comm.GetExistedProcess());
}
Comm类的几个方法,请参考如下代码:
/// <summary>
/// 检测单进程启动
/// </summary>
/// <returns>true:可以启动 false:已有启动进程</returns>
public static bool CheckCanStart()
{
var currentProcess = Process.GetCurrentProcess();
var process = Process.GetProcesses().AsParallel().FirstOrDefault(p =>
p.ProcessName == currentProcess.ProcessName
&& p.Id != currentProcess.Id);
return process == null;
}
/// <summary>
/// 获取重复进程
/// </summary>
/// <returns>true:可以启动 false:已有启动进程</returns>
public static Process GetExistedProcess()
{
var currentProcess = Process.GetCurrentProcess();
var process = Process.GetProcesses().AsParallel().FirstOrDefault(p =>
p.ProcessName == currentProcess.ProcessName
&& p.Id != currentProcess.Id);
return process;
}