Comment exécuter des commandes en ligne de commande à partir de code

J’ai besoin de faire 2 choses: exécuter un fichier de commandes (fonctionne bien) et exécuter une commande (ne fonctionne pas). La méthode pour la commande lève l’exception “fichier introuvable”. Si j’ouvre une fenêtre cmd et tapez la commande, cela fonctionne parfaitement.

private static void Rescan() { //System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("DEVCON ReScan"); //psi.RedirectStandardOutput = true; //psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //psi.UseShellExecute = false; //System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi); System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "DEVCON ReScan"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.UseShellExecute = false; proc.Start(); proc.WaitForExit(); System.IO.StreamReader myOutput = proc.StandardOutput; proc.WaitForExit(4000); if (proc.HasExited) { ssortingng output = myOutput.ReadToEnd(); FileIO.WriteLog(_writePath, output); } } 

Le code commenté lève également la même exception.

DEVCON ReScan est-il vraiment le nom de l’exécutable? Je suppose que l’exécutable est DEVCON, alors que ReScan est un paramètre. Cela signifie que vous devez définir StartInfo.FileName sur “DEVCON” et StartInfo.Arguments sur “ReScan”.

Est-ce que l’application DEVCON est réellement dans le répertoire de travail? Sinon, cela ne fonctionnera que si vous spécifiez le chemin complet.

De plus, vous devez spécifier l’extension, donc je suppose que vous devriez choisir “Devcon.exe” et spécifier les parameters non pas dans le nom du fichier, mais dans les parameters 🙂

Essaye ça:

  ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = Environment.GetEnvironmentVariable("comspec"); psi.CreateNoWindow = true; psi.RedirectStandardError = true; psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; Process p = Process.Start(psi); ConsoleColor fc = Console.ForegroundColor; StreamWriter sw = p.StandardInput; StreamReader sr = p.StandardOutput; char[] buffer = new char[1024]; int l = 0; sw.Write("DEVCON ReScan"); sw.Write(sw.NewLine); Console.Write(">> "); l = sr.Read(buffer, 0, buffer.Length); for (int n = 0; n < l; n++) Console.Write(buffer[n] + " "); p.Close();