2017-10-20 5 views
-1

以下は機能の例です。 WPFアプリからパラメータとしてjson文字列を含む.exeを正しく開始するにはどうすればよいですか?

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

は、私はこのようなモデルを持っています。

次にJSON文字列をパラメータとして使用して.exeファイルを起動しています。

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

デバッグ、私はこのようなFILE.EXEに静的なMainメソッドを呼び出すことができます:

string[] parameters = {jsonStartParams}; 
File.Program.Main(parameters); 
ProcessStartInfo info = new ProcessStartInfo 
{ 
    Arguments = jsonStartParams, 
    FileName = "C:\\Folder\\File.exe" 
}; 

Process.Start(info); 

FILE.EXE で、私は文字列を受け取り、タスクを持っています

これは魅力的ですが、JSON文字列パラメータを使用してProcess.Startで.exeファイルを呼び出すとすぐに、

で失敗します

JSONオブジェクト内の最初のプロップでNewtonsoft.Json.JsonReaderException

解決策の正しい方向に私を指摘できますか?

ありがとうございました!

+0

私はあなたがそれをやろうとしていないと思います。 Windowsのコマンド文字列を適切にエスケープするのは非常に難しいです。以下の答えは役に立たない。代わりに、JSON文字列をTEMPファイルに保存し、そのファイル名をパラメータとして使用するか、stdin経由で.exeにパイプしてください。 – Jacob

答えて

1

よう

何かをエスケープする必要があります。次のように引用符をエスケープしてみてください。

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

これは動作しました。私はそれが可能であることを知っていました。ありがとう! – Kristian

-1

おそらくJSON文字列にjsonStartParamsで引用符が複数の引数に分かれ議論を行っている。この

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

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

ありがとうございます。ちょうどそれを試みた。問題を解決しませんでした。 – Kristian

+0

推奨しません。 Jsonは、 "|>"などの意味を持つ特殊文字でいっぱいになることがあります。コマンドラインパラメータの場合、これらはすべて特殊な方法でエスケープする必要があります。 – Jacob

関連する問題