【发布时间】:2012-11-12 16:19:17
【问题描述】:
我知道如何确保我一次只运行一个应用程序实例: How to check if another instance of the application is running
但是...我怎样才能确保当第二个实例启动时,第一个实例将被关闭(而不是仅仅退出通常完成的第二个实例)。最好等待它完全关闭。
如果同时启动了 2 个以上的实例,则应该只允许最后一个实例“存活”。
我明白了(谢谢你所有的答案)。我的解决方案如下:
#region Kill other running processes of this application
List<Process> processes = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).ToList();
if (processes.Count > 1)
{
processes.Sort((x, y) => DateTime.Compare(x.StartTime, y.StartTime));
for (int i = 0; i < processes.Count - 1; i++)
{
processes[i].CloseMainWindow();
processes[i].WaitForExit();
}
}
#endregion
Console.WriteLine(string.Format("{0}:{1}", DateTime.Now.Minute, DateTime.Now.Second));
Console.ReadLine();
【问题讨论】:
-
找到另一个实例进程ID并杀死它?
-
这不是一个真正的答案,但我不会做你想做的事。例如,如果您的第一个实例中有未保存的内容,而您打开了第二个,则关闭它时可能会丢失数据。在处理 Singleton 时,当有一个打开的实例时,首选的行为是避免另一个实例,而不是关闭实例 1 并打开实例 2
-
在第二个实例启动时按名称获取进程并杀死所有具有该名称的进程
-
为什么是最后一个?这是否意味着您可能会丢失数据?为什么不聚焦/激活原件?您在此处的回复可能会告知我们的答案。
-
为什么不只是有一个容器来实例化您想要的对象,并记住它创建的所有对象,并且每当创建新对象时,它都会终止旧对象......和验证他们自己清理...