2017-10-20 8 views
-1

Das Folgende ist nur ein Beispiel für die Funktionalität.Wie starte ich eine .exe mit einer JSON-Zeichenfolge als Parameter richtig?

Ich habe ein Modell wie folgt aus:

public class StartParams 
{ 
    public string ParameterOne { get; set; } 
    public string ParameterTwo { get; set; } 
    public string ParameterThree { get; set; } 
} 

Aus einer WPF-Anwendung. Ich bin Serialisierung es als JSON wie folgt aus:

var startParams = new StartParams 
{ 
    ParameterOne = "parameterOne", 
    ParameterTwo = "parameterTwo", 
    ParameterThree = "parameterThree" 
}; 

var jsonStartParams = JsonConvert.SerializeObject(startParams); 

Dann habe ich als Parameter eine EXE-Datei mit dem JSON-String bin starten.

ProcessStartInfo info = new ProcessStartInfo 
{ 
    Arguments = jsonStartParams, 
    FileName = "C:\\Folder\\File.exe" 
}; 

Process.Start(info); 

In File.exe Ich habe eine Aufgabe, die einen String:

string[] parameters = {jsonStartParams}; 
File.Program.Main(parameters); 
:

public static async Task DoSomething(string jsonStartParams) 
{ 
    var startParams = JsonConvert.DeserializeObject<StartParams>(jsonStartParams); 

Wenn das Debuggen, ich die statische Main-Methode in File.exe wie folgt aufrufen können

Das funktioniert wie ein Charme, aber sobald ich die .exe-Datei mit Process.Start mit dem JSON-String-Parameter aufrufen, schlägt es mit

fehl

Newtonsoft.Json.JsonReaderException

an der ersten Stütze in dem Objekt JSON.

Kann mir bitte jemand in die richtige Richtung einer Lösung zeigen?

Vielen Dank!

+0

Ich glaube nicht, dass Sie versuchen sollten, das zu tun. Es ist sehr schwierig, eine Windows-Befehlszeichenfolge ordnungsgemäß zu umgehen. Die folgende Antwort wird nicht helfen. Speichern Sie stattdessen die JSON-Zeichenfolge in einer TEMP-Datei und verwenden Sie den Dateinamen als Parameter - oder leiten Sie sie in die .exe über stdin – Jacob

Antwort

1

Die Zitate in jsonStartParams das Argument in mehrere Argumente getrennt machen entkommen. Versuchen Sie, die Angebote wie folgt zu umgehen:

ProcessStartInfo info = new ProcessStartInfo 
{ 
    Arguments = "\"" + jsonStartParams.Replace("\"", "\\\"") + "\"", 
    FileName = "C:\\Folder\\File.exe" 
}; 
+0

Das hat es funktioniert. Ich wusste, dass es möglich war. Danke! – Kristian

-1

Sie müssen wahrscheinlich die JSON-String

so etwas wie dieses

JsonSerializerSettings settings = new JsonSerializerSettings 
{ 
    StringEscapeHandling = StringEscapeHandling.EscapeHtml 
}; 

var jsonStartParams = JsonConvert.SerializeObject(startParams, settings); 
+0

Danke für Ihre Antwort. Ich habe das gerade ausprobiert. Hat das Problem nicht gelöst. – Kristian

+0

Nicht empfohlen. Json kann voll von Sonderzeichen mit Bedeutung sein, wie & "|> Jacob

Verwandte Themen