Estoy escribiendo una aplicación que se puede iniciar como una aplicación WinForms estándar o en modo desatendido desde la línea de comandos. La aplicación se creó utilizando la plantilla de WinForms estándar de VS 2k5.Salida a línea de comandos si se inició desde la línea de comandos
Cuando la aplicación se ejecuta desde la línea de comandos, quiero que muestre información que pueda ser capturada por el script que ejecuta la aplicación. Cuando hago esto directamente desde Console.WriteLine(), la salida no aparece, aunque se puede capturar mediante la canalización de un archivo.
Por otro lado, puedo forzar a la aplicación a que muestre una segunda consola haciendo una P/Invoke en AllocConsole() desde kernel32. Esto no es lo que quiero, sin embargo. Quiero que la salida aparezca en la misma ventana desde la que se llamó la aplicación.
Este es el código saliente que me permite que aparezca una consola desde la línea de comandos:
<STAThread()> Public Shared Sub Main()
If My.Application.CommandLineArgs.Count = 0 Then
Dim frm As New ISECMMParamUtilForm()
frm.ShowDialog()
Else
Try
ConsoleControl.AllocConsole()
Dim exMan As New UnattendedExecutionManager(ConvertArgs())
IsInConsoleMode = True
OutputMessage("Application started.")
If Not exMan.SetSettings() Then
OutputMessage("Execution failed.")
End If
Catch ex As Exception
Console.WriteLine(ex.ToString())
Finally
ConsoleControl.FreeConsole()
End Try
End If
End Sub
Public Shared Sub OutputMessage(ByVal msg As String, Optional ByVal isError As Boolean = False)
Trace.WriteLine(msg)
If IsInConsoleMode Then
Console.WriteLine(msg)
End If
If isError Then
EventLog.WriteEntry("ISE CMM Param Util", msg, EventLogEntryType.Error)
Else
EventLog.WriteEntry("ISE CMM Param Util", msg, EventLogEntryType.Information)
End If
End Sub