2010-08-06 8 views
2

J'ai un programme qui accepte une commande Cmd en tant qu'argument de commande.Transmission de la commande Cmd à C# Application

Fondamentalement, vous appelez cette façon: C:\MyProgram.exe del C:\test.txt

La commande ci-dessus fonctionne très bien. Cependant, lorsque je tente de faire une commande xcopy échoue:

C:\MyProgram.exe xcopy C:\test.txt C:\Temp\Test2.txt 

Le code du programme:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string command = GetCommandLineArugments(args); 

     // /c tells cmd that we want it to execute the command that follows and then exit. 
     System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/D /c " + command); 

     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.UseShellExecute = false; 

     // Do not create the black window. 
     procStartInfo.CreateNoWindow = true; 
     procStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     process.StartInfo = procStartInfo; 
     process.Start(); 
    } 

    private static string GetCommandLineArugments(string[] args) 
    { 
     string retVal = string.Empty; 

     foreach (string arg in args) 
      retVal += " " + arg; 

     return retVal; 
    } 
} 
+0

Est-ce que C: \ test.txt existe lorsque vous exécutez la commande xcopy? –

+0

Comment cela échoue-t-il? Quelle erreur cela donne-t-il? – David

+0

@Jimmy Oui, le répertoire ci-dessus était un répertoire, mais dans notre vrai appel du programme le répertoire existe. – mint

Répondre

2

Je pense que la réponse de Jimmy Hoffa est juste, pour la résoudre, vous pouvez cocater "démarrer" au début de la commande. C: \ temp \ test2.html C: \ temp \ test2.html vous apportera une fenêtre avec une invite si nécessaire.

+0

en ajoutant le début l'a fait. Merci beaucoup! Ps jimmy je vous ai mis à jour, et je n'ai plus de voix jonathan, je vais vous upvote quand je peux. – mint

+0

Merci! (Je déteste la limite de 15 caractères dans les commentaires!) – Jonathan

6

Je pense que votre application fonctionne, alors j'ai essayé la commande et je viens juste cette invite pour entrée à partir de:

C:\>xcopy C:\temp\test.html C:\temp\test2.html 
Does C:\temp\test2.html specify a file name 
or directory name on the target 
(F = file, D = directory)? 

peut-être est bombardements parce que vous n'avez pas le stdin lié à, et votre application est tout simplement le code de retournerez retour de l'exécution.

Questions connexes