c# - Use Process.Start con parámetros Y espacios en ruta
(4)
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, por lo 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?
Después de ver las otras soluciones proporcionadas, me encontré con el problema en el que todos mis diversos argumentos se agrupaban en un solo argumento.
es decir, "-setting0=arg0 --subsetting0=arg1"
Así que propondría 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 alrededor de todo el conjunto de argumentos. Y como señala Red_Shadow esto se puede hacer con una sola línea.
Process.Start("/"" + filename + "/"", arguments here)
Incluso cuando usa la clase ProcessStartInfo, si tiene que agregar espacios para argumentos, las respuestas anteriores no resolverán el problema. Hay una solución simple. Simplemente añada 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í he añadido citas escapadas alrededor de nombre de 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);
Puede usar la clase ProcessStartInfo para separar sus argumentos, Nombre de archivo, Directorio de trabajo 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 usará para el parámetro p2