Use Process.Start con parámetros Y espacios en el camino

He visto ejemplos similares, pero no puedo encontrar algo exactamente como mi problema.

Necesito ejecutar un comando como este desde C #:

C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe p1=hardCodedv1 p2=v2 

Estoy configurando v2 en tiempo de ejecución, así que necesito poder modificar la cadena en C # antes de llamar a Process.Start. ¿Alguien sabe cómo manejar esto, ya que tengo espacios entre mis parámetros?

Puede usar la clase ProcessStartInfo para separar sus argumentos, FileName, WorkingDirectory y argumentos sin preocuparse por los espacios

 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); 

donde MakeParameter es una función que devuelve la cadena que se utilizará para el parámetro p2

Incluso cuando usa la Clase ProcessStartInfo, si tiene que agregar espacios para argumentos, entonces las respuestas anteriores no resolverán el problema. Hay una solución simple. Solo agrega citas alrededor de los argumentos. Eso es todo.

  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); 

Aquí agregué comillas escapadas alrededor del nombre del archivo, y funciona.

Prueba esto

 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); 

Después de ver las otras soluciones proporcionadas, me encontré con el problema donde todos mis diversos argumentos se agruparon en un solo argumento.

es decir "-setting0=arg0 --subsetting0=arg1"

Entonces propongo lo siguiente:

  ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\""; psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\""); Process.Start(psi); 

Con las comillas alrededor de cada argumento, en lugar de todo el conjunto de argumentos. Y como lo señala Red_Shadow, todo esto se puede hacer con una sola línea

  Process.Start("\"" + filename + "\"", arguments here)