Ci-dessous est juste un exemple de la fonctionnalité.Comment démarrer un fichier .exe avec une chaîne json comme paramètre correctement?
J'ai un modèle comme celui-ci:
public class StartParams
{
public string ParameterOne { get; set; }
public string ParameterTwo { get; set; }
public string ParameterThree { get; set; }
}
A partir d'une application WPF. Je sérialisation comme JSON comme ceci:
var startParams = new StartParams
{
ParameterOne = "parameterOne",
ParameterTwo = "parameterTwo",
ParameterThree = "parameterThree"
};
var jsonStartParams = JsonConvert.SerializeObject(startParams);
Je suis le lancement d'un fichier .exe avec la chaîne JSON en tant que paramètre.
ProcessStartInfo info = new ProcessStartInfo
{
Arguments = jsonStartParams,
FileName = "C:\\Folder\\File.exe"
};
Process.Start(info);
En FILE.EXE J'ai une tâche qui prend une chaîne:
public static async Task DoSomething(string jsonStartParams)
{
var startParams = JsonConvert.DeserializeObject<StartParams>(jsonStartParams);
Lorsque le débogage, je peux appeler la méthode principale statique dans FILE.EXE comme ceci:
string[] parameters = {jsonStartParams};
File.Program.Main(parameters);
Cela fonctionne comme un charme, mais dès que j'appelle le fichier .exe avec Process.Start, avec le paramètre de chaîne JSON, il échoue avec
Newtonsoft.Json.JsonReaderException
à la première hélice dans l'objet JSON.
Quelqu'un peut-il me diriger dans la bonne direction d'une solution?
Merci!
Je ne pense pas que vous devriez essayer de faire cela. Il est très difficile d'échapper correctement une chaîne de commande Windows. La réponse ci-dessous ne va pas aider. Au lieu de cela, enregistrez la chaîne JSON dans un fichier TEMP et utilisez le nom de fichier comme paramètre - ou placez-le dans le fichier .exe via stdin – Jacob