¿Hay alguna forma de ejecutar comandos del símbolo del sistema desde una aplicación C #? Si es así, ¿cómo haría lo siguiente?
copy /b Image1.jpg + Archive.rar Image2.jpg
Básicamente, esto incrusta un archivo RAR dentro de la imagen JPG. Me preguntaba si había una manera de hacer esto automáticamente en C #.
Respuestas:
esto es todo lo que tiene que hacer para ejecutar comandos de shell desde C #
EDITAR:
Esto es para ocultar la ventana de cmd.
EDITAR: 2
Importante es que el argumento comienza con lo
/C
contrario no funcionará. Cómo dijo Scott Ferguson : "Ejecuta el comando especificado por la cadena y luego termina".fuente
Intenté 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:
fuente
cmd.StandardInput.WriteLine(@"cd C:\Test; pwd")
fuente
@
signo en C #?proc1.FileName = "C:\\Windows\\System32\\cmd.exe";
proc1.Verb = "runas";
hace que este proceso se ejecute con privilegios elevados ... Esto no siempre está previsto.Ninguna de las respuestas anteriores ayudó por alguna razón, parece que barren los errores debajo de la alfombra y dificultan la resolución de los comandos. Así que terminé con algo como esto, tal vez ayude a alguien más:
fuente
cmd.exe
aplicación, puede pasar comandos como argumentos.echo Hello World!
y mostrara la salida del comando en la ventana cmd que aparece. Así que he intentado:Filename = @"echo"
,Arguments = "Hello World!"
,UseShellExecute = false
,RedirectStandardOuput = false
,CreateNoWindow = false
. Esto permitió que la ventana cmd de la aplicación principal mostrara "¡Hola mundo!" (lo cual tiene sentido porque stdout no se redirigió al proceso secundario).Aunque técnicamente esto no responde directamente a la pregunta planteada, sí responde a la pregunta de cómo hacer lo que el cartel 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 uso 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 pequeños fragmentos 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 el final del archivo zip alcanzado:
fuente
si desea mantener abierta la ventana de cmd o desea usarla en winform / wpf, úsela así
Mantendrá la ventana cmd abierta
fuente
cmd
comando y sus parámetros.Sí, la hay (ver 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".
fuente
Puede hacer esto usando CliWrap en una línea:
fuente
Unable to find package 'CliWrap' at source
con una referencia a
Microsoft.VisualBasic
fuente
Aquí hay una pequeña versión simple y menos código. También ocultará la ventana de la consola.
fuente
si desea ejecutar el comando en modo asíncrono e imprimir los resultados. puedes esta clase:
fuente
Puede lograr esto utilizando el siguiente método (como se menciona en otras respuestas):
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:
fuente
puede usar simplemente escribir el código en una
.bat
extensión de formato, el código del archivo por lotes:c:/ copy /b Image1.jpg + Archive.rar Image2.jpg
usa este código c #:
Process.Start("file_name.bat")
fuente
.vbs
extensión de formato, el código:CreateObject("Wscript.Shell").Run "filename.bat",0,True