J'ai vu des exemples similaires, mais je ne trouve pas quelque chose exactement comme mon problème.
J'ai besoin d'exécuter une commande comme celle-ci à partir de C #:
C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe p1=hardCodedv1 p2=v2
Je configure la v2 à l'exécution, j'ai donc besoin de pouvoir modifier la chaîne en C # avant d'appeler Process.Start. Quelqu'un sait-il comment gérer cela, car j'ai des espaces entre mes paramètres?
Vous pouvez utiliser la classe ProcessStartInfo pour séparer vos arguments, FileName, WorkingDirectory et arguments sans vous soucier des espaces
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);
où MakeParameter est une fonction qui renvoie la chaîne à utiliser pour le paramètre p2
Même lorsque vous utilisez la classe ProcessStartInfo, si vous devez ajouter des espaces pour les arguments, les réponses ci-dessus ne résoudront pas le problème. Il existe une solution simple. Ajoutez simplement des guillemets autour des arguments. C'est tout.
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);
Ici, j'ai ajouté des guillemets d'échappement autour du nom de fichier, et cela fonctionne.
Essaye ça
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);
Après avoir examiné les autres solutions fournies, j'ai rencontré le problème où tous mes différents arguments étaient regroupés en un seul argument.
c'est à dire. "-setting0=arg0 --subsetting0=arg1"
Je proposerais donc ce qui suit:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\"";
psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\"");
Process.Start(psi);
Avec les guillemets autour de chaque argument, au lieu de l'ensemble de l'ensemble des arguments. Et comme indiqué par Red_Shadow tout cela peut être fait avec la seule ligne
Process.Start("\"" + filename + "\"", arguments here)