我正在开发一个程序,其中只有一个实例可以运行。我知道我可以应用互斥锁来防止多个实例运行。
但是我想要它,所以如果一个应用程序的新实例运行,它应该终止旧的实例。可执行文件将始终具有相同的名称。
我尝试在form事件上运行以下操作;
Process[] pname = Process.GetProcessesByName(AppDomain.CurrentDomain.FriendlyName.Remove(AppDomain.CurrentDomain.FriendlyName.Length - 4));
if (pname.Length > 1)
{
pname[0].Kill();
}这实际上很有效..。每一次蓝色的月亮。说真的它起作用了..。第一次,第二次应用程序将根本不加载。如果我再运行5次,它可能会运行。
它似乎不太可靠,有没有人可能有一个更优雅的解决方案?
谢谢!
发布于 2014-06-03 07:35:12
这对我来说很管用
if (pname.Length > 1)
{
pname.Where(p => p.Id != Process.GetCurrentProcess().Id).First().Kill();
}发布于 2014-06-03 07:20:50
您可以尝试使用此代码而不是使用可执行文件名来获取进程吗?
Process currentProcess = Process.GetCurrentProcess();
Process[] processItems = Process.GetProcessesByName(currentProcess.ProcessName);发布于 2014-06-03 07:25:26
你可以改变你的逻辑。当您基于条件pname运行另一个实例时,为什么不调用Environment.Exit。长度==1
https://stackoverflow.com/questions/24009201
复制相似问题