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]);