From 327ca268e47198ed03de09c544f2956335d914a7 Mon Sep 17 00:00:00 2001 From: manveldavid <10kwelldavid@gmail.com> Date: Sun, 28 Jun 2026 01:48:31 +0300 Subject: [PATCH] Fix: Show window instead of error when launching second instance - Replace MessageBox with named pipe signal to show existing window - Add --show-window command to PipeManager - Subscribe OpenApplication() to OnShowWindow in HandlersInitializer - Fix System.Windows.Forms package reference in csproj --- InvisibleMan-XRay/InvisibleMan-XRay.csproj | 3 ++- InvisibleMan-XRay/Managers/AppManager.cs | 19 +------------------ .../Initializers/HandlersInitializer.cs | 6 ++++++ InvisibleMan-XRay/Managers/PipeManager.cs | 18 +++++++++++++++++- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/InvisibleMan-XRay/InvisibleMan-XRay.csproj b/InvisibleMan-XRay/InvisibleMan-XRay.csproj index b6a1fbf3..fd1aa4a5 100644 --- a/InvisibleMan-XRay/InvisibleMan-XRay.csproj +++ b/InvisibleMan-XRay/InvisibleMan-XRay.csproj @@ -14,9 +14,11 @@ enable 0108;8600;8601;8602;8603;8604;8618;8625;8629;8762 true + true Assets/Icon.ico true <_SuppressWpfTrimError>true + <_SuppressWinFormsTrimError>true true true partial @@ -28,7 +30,6 @@ - diff --git a/InvisibleMan-XRay/Managers/AppManager.cs b/InvisibleMan-XRay/Managers/AppManager.cs index c48918ef..63183041 100644 --- a/InvisibleMan-XRay/Managers/AppManager.cs +++ b/InvisibleMan-XRay/Managers/AppManager.cs @@ -57,29 +57,12 @@ private void AvoidRunningMultipleInstances() if (IsThereAnyArg()) PipeManager.SignalOpenedApp(args); else - ShowAppAlreadyRunningMessageBox(); + PipeManager.SignalShowWindow(); Environment.Exit(0); } bool IsThereAnyArg() => args.Length != 0; - - void ShowAppAlreadyRunningMessageBox() - { - SettingsHandler settingsHandler = new SettingsHandler(); - - LocalizationHandler localizationHandler = new LocalizationHandler(); - localizationHandler.Setup( - getCurrentLanguage: settingsHandler.UserSettings.GetLanguage - ); - - LocalizationService localizationService = new LocalizationService(); - localizationService.Setup( - getLocalizationResource: localizationHandler.GetLocalizationResource - ); - - MessageBox.Show(localizationService.GetTerm(Localization.APP_ALREADY_RUNNING)); - } } private void SetApplicationCurrentDirectory() diff --git a/InvisibleMan-XRay/Managers/Initializers/HandlersInitializer.cs b/InvisibleMan-XRay/Managers/Initializers/HandlersInitializer.cs index e1ba6841..57bce23a 100644 --- a/InvisibleMan-XRay/Managers/Initializers/HandlersInitializer.cs +++ b/InvisibleMan-XRay/Managers/Initializers/HandlersInitializer.cs @@ -44,6 +44,7 @@ WindowFactory windowFactory SetupNotifyHandler(); SetupDeepLinkHandler(); SetupLocalizationHandler(); + SetupPipeManager(); void SetupProcessHandler() { @@ -180,6 +181,11 @@ void SetupLocalizationHandler() getCurrentLanguage: settingsHandler.UserSettings.GetLanguage ); } + + void SetupPipeManager() + { + PipeManager.OnShowWindow += OpenApplication; + } } private void OpenApplication() diff --git a/InvisibleMan-XRay/Managers/PipeManager.cs b/InvisibleMan-XRay/Managers/PipeManager.cs index 2d57f05e..d9da5c16 100644 --- a/InvisibleMan-XRay/Managers/PipeManager.cs +++ b/InvisibleMan-XRay/Managers/PipeManager.cs @@ -9,8 +9,10 @@ namespace InvisibleManXRay.Managers public static class PipeManager { private const string PIPE_NAME = "InvisibleManXRayPipe"; + private const string SHOW_WINDOW_COMMAND = "--show-window"; public static Action OnReceiveArg = delegate{}; + public static Action OnShowWindow = delegate{}; public static void ListenForPipes() { @@ -23,7 +25,10 @@ public static void ListenForPipes() StreamReader reader = new StreamReader(pipeServer); string message = reader.ReadToEnd(); Application.Current.Dispatcher.BeginInvoke(new Action(delegate { - OnReceiveArg.Invoke(message); + if (message.Trim() == SHOW_WINDOW_COMMAND) + OnShowWindow.Invoke(); + else + OnReceiveArg.Invoke(message); })); pipeServer.Close(); @@ -43,6 +48,17 @@ public static void SignalOpenedApp(string[] args) writer.Close(); } + public static void SignalShowWindow() + { + NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", PIPE_NAME); + pipeClient.Connect(); + + StreamWriter writer = new StreamWriter(pipeClient); + writer.WriteLine(SHOW_WINDOW_COMMAND); + writer.Flush(); + writer.Close(); + } + public static void SignalThisApp(string[] args) { OnReceiveArg.Invoke(args[0]);