c# - programacion - ¿Cómo ocultar la ventana de cmd mientras se ejecuta un archivo por lotes?
ocultar ventana cmd (4)
¿Cómo ocultar la ventana de cmd mientras se ejecuta un archivo por lotes?
Uso el siguiente código para ejecutar el archivo por lotes
process = new Process();
process.StartInfo.FileName = batchFilePath;
process.Start();
De acuerdo con las propiedades del Proceso , usted tiene un:
Propiedad:
CreateNoWindow
Notas: le permite ejecutar un programa de línea de comando en silencio. No muestra una ventana de consola.
y:
Propiedad:
WindowStyle
Notas: Use esto para configurar ventanas como ocultas. El autor ha utilizadoProcessWindowStyle.Hidden
menudo.
¡Como ejemplo!
static void LaunchCommandLineApp()
{
// For the example
const string ex1 = "C://";
const string ex2 = "C://Dir";
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "dcm2jpg.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "-f j -o /"" + ex1 + "/" -z 1.0 -s y " + ex2;
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch
{
// Log error.
}
}
Esto es lo que funcionó para mí. Cuando redirige todas las entradas y salidas, y establece la ventana oculta, debería funcionar.
Process p = new Process();
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
Si proc.StartInfo.UseShellExecute es falso , entonces está iniciando el proceso y puede usar:
proc.StartInfo.CreateNoWindow = true;
Si proc.StartInfo.UseShellExecute es verdadero , entonces el sistema operativo está iniciando el proceso y debe proporcionar una "pista" al proceso a través de:
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Sin embargo, la aplicación llamada puede ignorar esta última solicitud.
Si usa UseShellExecute = false , es posible que desee considerar redirigir la salida / error estándar para capturar cualquier registro producido:
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);
proc.StartInfo.RedirectStandardError = true;
proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);
Y tener una función como
private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow;
}
Hay una buena página que cubre CreateNoWindow
esto en un blog de MSDN .
También hay un error en Windows que puede arrojar un diálogo y derrotar CreateNoWindow
si está pasando un nombre de usuario / contraseña. Para detalles
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858
Use: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;