Use local mutexes (#10651)

* Update file config mutex code in KeyboardManager

* Update runner instance mutex names and logic

* Update Launcher mutex

* Update a mutex in the Runner

* Restored a mutex used in the installer

* Update src/modules/launcher/PowerLauncher/App.xaml.cs

Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com>
This commit is contained in:
Ivan Stošić
2021-04-08 19:42:46 +02:00
committed by GitHub
parent aa5ff65b54
commit c08be14919
10 changed files with 33 additions and 17 deletions

View File

@@ -29,7 +29,7 @@ namespace PowerLauncher
{
public static PublicAPIInstance API { get; private set; }
private const string Unique = "PowerLauncher_Unique_Application_Mutex";
private const string Unique = "PowerToys_PowerToysRun_InstanceMutex";
private static bool _disposed;
private PowerToysRunSettings _settings;
private MainViewModel _mainVM;

View File

@@ -44,6 +44,11 @@ namespace PowerLauncher.Helper
/// </summary>
private const string ChannelNameSuffix = "SingeInstanceIPCChannel";
/// <summary>
/// Prefix to the names of mutexes which ensures they are unique in a Windows session.
/// </summary>
private const string LocalMutexPrefix = @"Local\";
/// <summary>
/// Gets or sets application mutex.
/// </summary>
@@ -62,7 +67,8 @@ namespace PowerLauncher.Helper
string channelName = string.Concat(applicationIdentifier, Delimiter, ChannelNameSuffix);
// Create mutex based on unique application Id to check if this is the first instance of the application.
SingleInstanceMutex = new Mutex(true, applicationIdentifier, out bool firstInstance);
string mutexName = string.Concat(LocalMutexPrefix, uniqueName);
SingleInstanceMutex = new Mutex(true, mutexName, out bool firstInstance);
if (firstInstance)
{
_ = CreateRemoteService(channelName);