public static void Main() { Log.Info($"Starting PowerToys Run with PID={Environment.ProcessId}", typeof(App)); int powerToysPid = GetPowerToysPId(); if (powerToysPid != 0) { // The process started from the PT Run module interface. One instance is handled there. Log.Info($"Runner pid={powerToysPid}", typeof(App)); SingleInstance <App> .CreateInstanceMutex(); } else { // If PT Run is started as standalone application check if there is already running instance if (!SingleInstance <App> .InitializeAsFirstInstance()) { Log.Warn("There is already running PowerToys Run instance. Exiting PowerToys Run", typeof(App)); return; } } using (var application = new App()) { application.InitializeComponent(); new Thread(() => { var eventHandle = new EventWaitHandle(false, EventResetMode.AutoReset, Constants.RunExitEvent()); if (eventHandle.WaitOne()) { Log.Warn("RunExitEvent was signaled. Exiting PowerToys", typeof(App)); ExitPowerToys(application); } }).Start(); if (powerToysPid != 0) { RunnerHelper.WaitForPowerToysRunner(powerToysPid, () => { Log.Info($"Runner with pid={powerToysPid} exited. Exiting PowerToys Run", typeof(App)); ExitPowerToys(application); }); } application.Run(); } }