Ich schreibe eine Anwendung, die entweder als Standard-WinForms-App oder im unbeaufsichtigten Modus über die Befehlszeile gestartet werden kann. Die Anwendung wurde unter Verwendung der VS2k5-Standard-WinForms-Vorlage erstellt.Ausgabe an die Befehlszeile, wenn über die Befehlszeile gestartet
Wenn die Anwendung über die Befehlszeile ausgeführt wird, möchte ich Informationen ausgeben, die vom Skript, das die Anwendung ausführt, erfasst werden können. Wenn ich dies direkt von Console.WriteLine() aus tue, wird die Ausgabe nicht angezeigt, obwohl sie durch Piping in eine Datei erfasst werden kann.
Auf der anderen Seite kann ich die Anwendung erzwingen, eine zweite Konsole zu öffnen, indem Sie eine P/Invoke auf AllocConsole() von kernel32. Das ist aber nicht das, was ich will. Ich möchte, dass die Ausgabe im selben Fenster erscheint, aus dem die Anwendung aufgerufen wurde.
Dies ist der ausgeprägte Code, der mir erlaubt, eine Konsole über die Befehlszeile Pop-up:
<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