已运行检测改用互斥锁 增强可靠性

pull/543/head
YFdyh000 2020-03-16 03:40:36 +08:00
parent 794b88e5ab
commit d94fcbd8a3
2 changed files with 14 additions and 19 deletions

View File

@ -221,6 +221,10 @@ namespace v2rayN
{
get; set;
}
public static System.Threading.Mutex mutexObj
{
get; set;
}
#endregion

View File

@ -1,6 +1,5 @@
using System;
using System.Diagnostics;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
using v2rayN.Forms;
@ -32,9 +31,7 @@ namespace v2rayN
//AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Thread.Sleep(300); // 尽量避免切换语言后提示“已经运行”
Process instance = RunningInstance();
if (instance == null)
if (!IsDuplicateInstance())
{
if (!UnzipLibs())
{
@ -81,23 +78,17 @@ namespace v2rayN
//}
/// <summary>
/// 获取正在运行的实例没有运行的实例返回null;
/// 检查是否已在运行
/// </summary>
public static Process RunningInstance()
public static bool IsDuplicateInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processes)
{
if (process.Id != current.Id)
{
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == process.MainModule.FileName)
{
return process;
}
}
}
return null;
//string name = "v2rayN";
string name = Utils.GetExePath(); // Allow different locations to run
name = name.Replace("\\", "/"); // https://stackoverflow.com/questions/20714120/could-not-find-a-part-of-the-path-error-while-creating-mutex
Global.mutexObj = new Mutex(false, name, out bool bCreatedNew);
return !bCreatedNew;
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)