2016-12-22 2 views
4

J'ai vu des exemples similaires, mais je ne trouve pas exactement quelque chose comme mon problème.C# Use Process.Start avec les paramètres AND espaces dans le chemin

Je dois exécuter une commande comme celle de C#:

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = "cmd"; 
startInfo.Arguments = "/K D:\\as df\\solver\\Swag.Console.exe -f D:\\as df\\solver\\2035.swag -p 5555"; 
Process.Start(startInfo); 

ne fonctionne pas.

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f D:\\as df\\solver\\2035.swag -p 5555"; 

ne fonctionne pas.

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555"; 

ne fonctionne pas.

startInfo.FileName = "\"D:\\as df\\solver\\Swag.Console.exe\""; 
startInfo.Arguments = " -f \"D:\\as df\\solver\\2035.swag\" -p 5555"; 

donc ça marche, mais je veux CMD, est-ce possible?

enter image description here

+0

Je dois La fenêtre CMD n'a pas été fermée après la fin de l'application –

+0

'var proc = Process.Start (startInfo); proc.WaitForExit(); ' – Sameer

+0

_italic_ ** gras **' proc.WaitForExit(); ' –

Répondre

3

arguments Le/K exécutera la commande qui suit. Il peut s'agir de beaucoup de commandes enchaînées avec & mais, et c'est ce qui vous manquait dans vos tentatives, elles doivent être entièrement entourées de guillemets doubles dans ce cas. Voir the SS64 cmd reference

En d'autres termes, la commande devrait ressembler à ceci:

cmd /K " here what ever you want to execute" 

En raison de l'avant et antislashs vous perdez rapidement la piste. J'ai donc sorti les guillemets doubles enveloppant un String.Format, afin que cela devienne un peu plus clair à quoi ressemblerait votre commande actuelle. Voici le code que je pense devrait fonctionner:

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = "cmd"; 
startInfo.Arguments = String.Format(
    "/K \"{0}\"", 
    " \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555"); 
Process.Start(startInfo); 

Si Swag.Console.Exe serait tout simplement vider ses arguments à la console ce serait le résultat:

-f 
D:\as df\solver\2035.swag 
-p 
5555 
+0

cool, ça marche! –