world run imprimir hello executecommand consola c# command prompt

run - hello world c#



Ejecutar comandos de solicitud de comando (10)

¿Hay alguna forma de ejecutar comandos de línea de comandos desde una aplicación de C #? Si es así, ¿cómo haría lo siguiente?

copy /b Image1.jpg + Archive.rar Image2.jpg

Esto básicamente incrusta un archivo RAR dentro de la imagen JPG. Me preguntaba si había una manera de hacer esto automáticamente en C #.


Aquí está la versión de código poco simple y menos. También ocultará la ventana de la consola-

System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; process.Start();


Aunque técnicamente esto no responde directamente a la pregunta planteada, sí responde a la pregunta de cómo hacer lo que el póster original quería hacer: combinar archivos. En todo caso, esta es una publicación para ayudar a los novatos a comprender de qué están hablando Instance Hunter y Konstantin.

Este es el método que utilizo para combinar archivos (en este caso, un jpg y un zip). Tenga en cuenta que creo un búfer que se llena con el contenido del archivo zip (en trozos pequeños en lugar de en una operación de lectura grande), y luego el búfer se escribe en la parte posterior del archivo jpg hasta que el final del archivo zip está alcanzado:

private void CombineFiles(string jpgFileName, string zipFileName) { using (Stream original = new FileStream(jpgFileName, FileMode.Append)) { using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read)) { var buffer = new byte[32 * 1024]; int blockSize; while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0) { original.Write(buffer, 0, blockSize); } } } }


Ninguna de las respuestas anteriores ayudó por alguna razón, parece que barren los errores debajo de la alfombra y dificultan la solución de problemas del comando. Así que terminé yendo con algo como esto, tal vez ayude a alguien más:

var proc = new Process { StartInfo = new ProcessStartInfo { FileName = @"C:/Program Files/Microsoft Visual Studio 14.0/Common7/IDE/tf.exe", Arguments = "checkout AndroidManifest.xml", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true, WorkingDirectory = @"C:/MyAndroidApp/" } }; proc.Start();


Probé la solución @RameshVel pero no pude pasar argumentos en mi aplicación de consola. Si alguien experimenta el mismo problema aquí hay una solución:

using System.Diagnostics; Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.Start(); cmd.StandardInput.WriteLine("echo Oscar"); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); cmd.WaitForExit(); Console.WriteLine(cmd.StandardOutput.ReadToEnd());


Puede lograr esto utilizando el siguiente método (como se menciona en otras respuestas):

strCmdText = "''/C some command"; Process.Start("CMD.exe", strCmdText);

Cuando probé los métodos enumerados anteriormente, descubrí que mi comando personalizado no funcionaba con la sintaxis de algunas de las respuestas anteriores.

Descubrí que los comandos más complejos deben encapsularse entre comillas para funcionar:

string strCmdText; strCmdText = "''/C cd " + path + " && composer update && composer install -o''"; Process.Start("CMD.exe", strCmdText);


Puedes hacerlo usando CliWrap en una línea:

var stdout = new Cli("cmd") .Execute("copy /b Image1.jpg + Archive.rar Image2.jpg") .StandardOutput;


Sí, hay (vea el enlace en el comentario de Matt Hamilton), pero sería más fácil y mejor usar las clases IO de .NET. Puede usar File.ReadAllBytes para leer los archivos y luego File.WriteAllBytes para escribir la versión "incrustada".


con una referencia a Microsoft.VisualBasic

Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);


esto es todo lo que tienes que hacer para ejecutar comandos de shell desde C #

string strCmdText; strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; System.Diagnostics.Process.Start("CMD.exe",strCmdText);

EDITAR:

Esto es para ocultar la ventana de cmd.

System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.FileName = "cmd.exe"; startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg"; process.StartInfo = startInfo; process.Start();

EDITAR: 2

Es importante que el argumento comience con /C contrario no funcionará. Cómo dijo Scott Ferguson : "Ejecuta el comando especificado por la cadena y luego termina".


var proc1 = new ProcessStartInfo(); string anyCommand; proc1.UseShellExecute = true; proc1.WorkingDirectory = @"C:/Windows/System32"; proc1.FileName = @"C:/Windows/System32/cmd.exe"; proc1.Verb = "runas"; proc1.Arguments = "/c "+anyCommand; proc1.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(proc1);