diff --git a/SingleInstanceHelper/ApplicationActivator.cs b/SingleInstanceHelper/ApplicationActivator.cs index 5c441fd..8e93d53 100644 --- a/SingleInstanceHelper/ApplicationActivator.cs +++ b/SingleInstanceHelper/ApplicationActivator.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.IO.Pipes; using System.Linq; +using System.Runtime.Serialization.Json; using System.Security.Cryptography; using System.Text; using System.Threading; @@ -51,7 +52,7 @@ public static bool LaunchOrReturn(Action otherInstanceCallback, string else { // We are not the first instance, send the named pipe message with our payload and stop loading - var namedPipeXmlPayload = new NamedPipeXmlPayload + var namedPipeXmlPayload = new Payload { CommandLineArguments = Environment.GetCommandLineArgs().ToList() }; @@ -87,7 +88,7 @@ private static bool IsApplicationFirstInstance() /// Uses a named pipe to send the currently parsed options to an already running instance. /// /// - private static void NamedPipeClientSendOptions(NamedPipeXmlPayload namedPipePayload) + private static void NamedPipeClientSendOptions(Payload namedPipePayload) { try { @@ -95,8 +96,8 @@ private static void NamedPipeClientSendOptions(NamedPipeXmlPayload namedPipePayl { namedPipeClientStream.Connect(3000); // Maximum wait 3 seconds - var xmlSerializer = new XmlSerializer(typeof(NamedPipeXmlPayload)); - xmlSerializer.Serialize(namedPipeClientStream, namedPipePayload); + var ser = new DataContractJsonSerializer(typeof(Payload)); + ser.WriteObject(namedPipeClientStream, namedPipePayload); } } catch (Exception) @@ -134,17 +135,17 @@ private static void NamedPipeServerConnectionCallback(IAsyncResult iAsyncResult) // End waiting for the connection _namedPipeServerStream.EndWaitForConnection(iAsyncResult); - var xmlSerializer = new XmlSerializer(typeof(NamedPipeXmlPayload)); - var namedPipeXmlPayload = (NamedPipeXmlPayload)xmlSerializer.Deserialize(_namedPipeServerStream); + var ser = new DataContractJsonSerializer(typeof(Payload)); + var payload = (Payload)ser.ReadObject(_namedPipeServerStream); - // namedPipeXmlPayload contains the data sent from the other instance + // payload contains the data sent from the other instance if (_syncContext != null) { - _syncContext.Post(_ => _otherInstanceCallback(namedPipeXmlPayload.CommandLineArguments.ToArray()), null); + _syncContext.Post(_ => _otherInstanceCallback(payload.CommandLineArguments.ToArray()), null); } else { - _otherInstanceCallback(namedPipeXmlPayload.CommandLineArguments.ToArray()); + _otherInstanceCallback(payload.CommandLineArguments.ToArray()); } } catch (ObjectDisposedException) diff --git a/SingleInstanceHelper/NamedPipeXmlPayload.cs b/SingleInstanceHelper/Payload.cs similarity index 76% rename from SingleInstanceHelper/NamedPipeXmlPayload.cs rename to SingleInstanceHelper/Payload.cs index 9fbdce7..e25fe36 100644 --- a/SingleInstanceHelper/NamedPipeXmlPayload.cs +++ b/SingleInstanceHelper/Payload.cs @@ -1,16 +1,18 @@ using System; using System.Collections.Generic; +using System.Runtime.Serialization; using System.Text; using System.Xml.Serialization; namespace SingleInstanceHelper { - internal class NamedPipeXmlPayload + [DataContract] + internal class Payload { /// /// A list of command line arguments. /// - [XmlElement("CommandLineArguments")] + [DataMember] public List CommandLineArguments { get; set; } = new List(); } } diff --git a/WinFormsTestApp/Program.cs b/WinFormsTestApp/Program.cs index 87c2f5f..0f956a3 100644 --- a/WinFormsTestApp/Program.cs +++ b/WinFormsTestApp/Program.cs @@ -18,7 +18,7 @@ static void Main(string[] args) Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - var first = ApplicationActivator.LaunchOrReturn(otherInstance => { MessageBox.Show("got data"); }, args); + var first = ApplicationActivator.LaunchOrReturn(otherInstance => { MessageBox.Show("got data: " + otherInstance.Skip(1).FirstOrDefault()); }, args); if(!first) return; Application.Run(new Form1());