私は同様の例を見てきましたが、私の問題とまったく同じようなものを見つけることができません。
C#から次のようなコマンドを実行する必要があります。
C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe p1=hardCodedv1 p2=v2
実行時にv2を設定しているため、Process.Startを呼び出す前にC#で文字列を変更できる必要があります。パラメータ間にスペースがあるので、これを処理する方法を知っていますか?
ProcessStartInfo クラスを使用して、スペースを心配せずに引数、FileName、WorkingDirectory、および引数を分離できます。
string fullPath = @"C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe"
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Path.GetFileName(fullPath);
psi.WorkingDirectory = Path.GetDirectoryName(fullPath);
psi.Arguments = "p1=hardCodedv1 p2=" + MakeParameter();
Process.Start(psi);
makeParameterは、p2パラメーターに使用される文字列を返す関数です
ProcessStartInfoクラスを使用する場合でも、引数にスペースを追加する必要がある場合、上記の回答では問題は解決しません。簡単な解決策があります。引数を引用符で囲むだけです。それで全部です。
string fileName = @"D:\Company Accounts\Auditing Sep-2014 Reports.xlsx";
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = "Excel.exe";
startInfo.Arguments = "\"" + fileName + "\"";
System.Diagnostics.Process.Start(startInfo);
ここで、ファイル名の周りにエスケープされた引用符を追加しましたが、動作します。
これを試して
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "\"C:\\FOLDER\\folder with spaces\\OTHER_FOLDER\\executable.exe\"";
startInfo.Arguments = "p1=hardCodedv1 p2=v2";
Process.Start(startInfo);
提供されている他のソリューションを見て、さまざまな引数がすべて1つの引数にまとめられている問題に遭遇しました。
つまり"-setting0=arg0 --subsetting0=arg1"
だから私は以下を提案します:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\"";
psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\"");
Process.Start(psi);
引数のセット全体ではなく、各引数を引用符で囲みます。 Red_Shadow で指摘されているように、これはすべて1行で実行できます。
Process.Start("\"" + filename + "\"", arguments here)