public static void Remove(ApplicationMutex applicationMutex) { lock (mutexDictionary) { if (mutexDictionary.ContainsKey(applicationMutex.ApplicationId)) { mutexDictionary.Remove(applicationMutex.ApplicationId); } } }
public static ApplicationMutex ApplicationMutex( this Assembly assembly, Action shutdown = null, Process mainProcess = null) { var applicationInstanceId = assembly.GetApplicationInstanceId(); var mutex = ApplicationMutexes.CreateOrExisting(applicationInstanceId); var applicationMutex = new ApplicationMutex(applicationInstanceId, mutex); if (!applicationMutex.IsAlreadyRunning) { return(applicationMutex); } if (mainProcess == null) { mainProcess = Process.GetCurrentProcess(); } var otherApplicationInstance = FindSingleInstanceProcess(mainProcess); if (otherApplicationInstance == null) { return(applicationMutex.AsSingle()); } var handle = otherApplicationInstance.MainWindowHandle.ToInt32(); WindowsHelper.ForceForegroundWindow(handle); if (shutdown != null) { shutdown(); } return(applicationMutex); }
public static ApplicationMutex ApplicationMutex( this Assembly assembly, Action shutdown = null, Process mainProcess = null) { var applicationInstanceId = assembly.GetApplicationInstanceId(); var mutex = ApplicationMutexes.CreateOrExisting(applicationInstanceId); var applicationMutex = new ApplicationMutex(applicationInstanceId, mutex); if (!applicationMutex.IsAlreadyRunning) { return applicationMutex; } if (mainProcess == null) { mainProcess = Process.GetCurrentProcess(); } var otherApplicationInstance = FindSingleInstanceProcess(mainProcess); if (otherApplicationInstance == null) { return applicationMutex.AsSingle(); } var handle = otherApplicationInstance.MainWindowHandle.ToInt32(); WindowsHelper.ForceForegroundWindow(handle); if (shutdown != null) { shutdown(); } return applicationMutex; }