Process.Start(ProcessStartInfo); を使用して、C# からコマンド ライン アプリケーションを実行しようとしています。
問題は、コマンド ライン アプリケーションが matlab スタンドアロンの .exe であり、オプションの引数があることです。これは、コマンド ラインで次のように渡すことを意味します。
app.exe "optional1" optional1value "optional2" optional2value
optional1valueは整数または文字列などです。
私たちが抱えている問題は、二重引用符が「optional1」引数の一部として渡されていないため、cmd.exe は次のようになっていると思います。
app.exe optional1 optional1value optional2 optional2value
またはそのようなもので、matlabのパーサーが明らかに混乱します。
私が試してみました:
@"""optional1"" optional1value ""optional2" optional2value"""
cmd行引数の二重引用符に関する他のSOの質問でいくつかが示唆しているように、それは私にとってはうまくいかないようです。
"\"optional1\" optional1value \"optional2\" optional2value\""
取得した引数を出力する小さな c# コマンド ライン .exe を作成しました。コマンドライン引数を VS Project->Debug 領域に入れて実行すると、二重引用符で出力されますが、コードでこれを行うとすべてのエスケープなどが原因で、.exe は二重引用符なしで引数を出力します。
おそらく.NET 3.5のcmdパーサーのバグであるというこの記事を見つけましたが、実行可能な解決策が見つからないようです。
誰にもアイデアはありますか?
お時間をいただきありがとうございます。
ポンチョ
PS Process.Start() で引数を送信するときに cmd.exe が取得するものを確認する方法はありますか? プロセスで cmd ウィンドウを開いていますが、cmd.exe が "app.exe optional1 optional1value" などの行を取得するのを見るといいでしょう。
再度、感謝します。