title: Output to command-line if started from command line
body: <p>I'm writing an application that can be started either as a standard WinForms app or in unattended mode from the command-line. The application was built using the VS 2k5 standard WinForms template.</p>
  
  <p>When the application is executed from the command-line, I want it to output information that can be captured by the script executing the application. When I do this directly from Console.WriteLine(), the output does not appear, although it can be captured by piping to a file.</p>
  
  <p>On the other hand, I can force the application to pop up a second console by doing a P/Invoke on AllocConsole() from kernel32. This is not what I want, though. I want the output to appear in the same window the application was called from.</p>
  
  <p>This is the salient code that allows me to pop up a console from the command line:</p>
  
  <pre><code>&lt;STAThread()&gt; 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
  </code></pre>