Fixed unhandled exception in SingleInstanceManager

This commit is contained in:
Jaex 2024-03-11 05:11:00 +03:00
parent e6a2ac818e
commit c3b27567dc
3 changed files with 19 additions and 11 deletions

View file

@ -68,7 +68,7 @@ protected void OnMessageAdded(string message)
MessageAdded?.Invoke(message); MessageAdded?.Invoke(message);
} }
private void ProcessMessageQueue() public void ProcessMessageQueue()
{ {
lock (loggerLock) lock (loggerLock)
{ {

View file

@ -69,6 +69,7 @@ public SingleInstanceManager(bool isSingleInstance, string[] args)
{ {
RedirectArgumentsToFirstInstance(args); RedirectArgumentsToFirstInstance(args);
DebugHelper.Logger.ProcessMessageQueue();
Environment.Exit(0); Environment.Exit(0);
} }
} }
@ -125,27 +126,34 @@ private async Task ListenForConnectionsAsync()
} }
catch (Exception e) catch (Exception e)
{ {
DebugHelper.WriteLine("Error in named pipe communication: {0}", e.Message); DebugHelper.WriteException(e);
} }
} }
} }
private void RedirectArgumentsToFirstInstance(string[] args) private void RedirectArgumentsToFirstInstance(string[] args)
{ {
using (NamedPipeClientStream clientPipe = new NamedPipeClientStream(".", PipeName, PipeDirection.Out)) try
{ {
clientPipe.Connect(); using (NamedPipeClientStream clientPipe = new NamedPipeClientStream(".", PipeName, PipeDirection.Out))
using (BinaryWriter writer = new BinaryWriter(clientPipe, Encoding.UTF8))
{ {
writer.Write(args.Length); clientPipe.Connect();
foreach (string argument in args) using (BinaryWriter writer = new BinaryWriter(clientPipe, Encoding.UTF8))
{ {
writer.Write(argument); writer.Write(args.Length);
foreach (string argument in args)
{
writer.Write(argument);
}
} }
} }
} }
catch (Exception e)
{
DebugHelper.WriteException(e);
}
} }
public void Dispose() public void Dispose()

View file

@ -377,13 +377,13 @@ public static void CloseSequence()
{ {
closeSequenceStarted = true; closeSequenceStarted = true;
DebugHelper.Logger.AsyncWrite = false;
DebugHelper.WriteLine("ShareX closing."); DebugHelper.WriteLine("ShareX closing.");
if (WatchFolderManager != null) WatchFolderManager.Dispose(); WatchFolderManager?.Dispose();
SettingManager.SaveAllSettings(); SettingManager.SaveAllSettings();
DebugHelper.WriteLine("ShareX closed."); DebugHelper.WriteLine("ShareX closed.");
DebugHelper.Logger.ProcessMessageQueue();
} }
} }