【发布时间】:2014-06-03 07:17:58
【问题描述】:
我正在开发一个程序,其中只有一个实例可以运行。我知道我可以应用互斥锁来防止多个实例运行。
但我想要它,所以如果应用程序的新实例运行,它应该终止旧实例。 可执行文件将始终具有相同的名称。
我尝试在表单加载事件上运行以下命令;
Process[] pname = Process.GetProcessesByName(AppDomain.CurrentDomain.FriendlyName.Remove(AppDomain.CurrentDomain.FriendlyName.Length - 4));
if (pname.Length > 1)
{
pname[0].Kill();
}
这实际上有效.....每个蓝月亮一次。说真的,它可以工作.. 第一次,第二次应用程序根本无法加载。如果我再运行它大约 5 次,它可能会运行。
好像不太靠谱,有没有人有更优雅的解决方案?
谢谢!
【问题讨论】:
-
这是订购的问题吗?我不确定你能保证
pname[0]不是新实例 -
为什么新实例比旧实例更受欢迎?这个问题的大多数解决方案都是让新实例将数据传递给旧实例然后退出,这通常是一个更容易解决的问题。
-
这对我的自动更新系统来说有点奇怪。但这正是我想要接近它的方式。我也相信这可能是排序的问题,但我认为列表中的第一个总是最旧的。我不知道如何检查它。
-
@Stella - 您的最后一条评论在我看来就像您正在寻找一种方法来重新启动您的应用程序并且只允许一个实例?
-
好的,但即使在这种情况下,您也可以adapt 找到现有实例并将数据传递给它的解决方案之一 - 而不是传递数据,而是传递一个表示“请自行中止”的消息,然后旧实例可以处理实际退出。
标签: c#