2009-10-08 5 views
1

Im using Process et ProcessStartInfo pour lancer une fenêtre cmd avec la sortie redirigée habituelle etc. Cependant, je suis tring pour lancer un exécutable en ligne de commande avec des arguments, et même si la chaîne est correct quand je fais écho à la cmd, quand je l'exécute sans écho je reçois "'C: \ Program' n'est pas reconnu comme une commande interne ou externe" comme si le chemin n'est pas entre guillemets et que l'espace est lancé c'est éteint.Passer des chemins vers cmd en utilisant ProcessStartInfo ne fonctionne pas comme prévu

Toute aide greatley appréciée!

 static void Backup(string machinename) 
     { 
      Process p = new Process(); 
      p.StartInfo = new ProcessStartInfo("cmd", "/c \"C:\\Program Files\\Citrix\\XenCenter\\xe.exe\" vm-export vm=" + machinename + " -s 192.168.00.00 -u root -pw Password1! filename=\"C:\\VMs\\" + machinename + ".xva\"") 
      { 
       RedirectStandardOutput = true, 
       UseShellExecute = false, 
       CreateNoWindow = false 
      }; 
      p.Start(); 
      string output = p.StandardOutput.ReadToEnd(); 
      p.WaitForExit(); 
      Console.WriteLine(output); 
     } 

Répondre

3

Vous ne devriez pas utiliser "cmd" pour appeler cela - cela fonctionne réellement contre vous dans ce cas, et ne sert à rien. Appelez simplement votre exécutable directement:

p.StartInfo = new ProcessStartInfo(
    @"C:\Program Files\Citrix\XenCenter\xe.exe", 
    "vm-export vm=" + machinename + " -s 192.168.00.00 -u root -pw Password1! filename=\"C:\\VMs\\" + machinename + ".xva\"") 
     { 
      RedirectStandardOutput = true, 
      UseShellExecute = false, 
      CreateNoWindow = false 
     }; 
+0

Cloué dans un! À votre santé! –

0

Vous devez disposer de chemins d'accès avec des espaces avec des guillemets supplémentaires; mais vous devez également utiliser Environment.ExpandEnvironmentVariables au lieu de hard-code pour "c".

Questions connexes