J'écris une application qui peut être démarrée soit en tant qu'application WinForms standard, soit en mode sans assistance à partir de la ligne de commande. L'application a été créée à l'aide du modèle standard WinForms VS 2k5. Lorsque l'application est exécutée à partir de la ligne de commande, je veux qu'elle produise des informations qui peuvent être capturées par le script exécutant l'application. Lorsque je le fais directement à partir de Console.WriteLine(), la sortie n'apparaît pas, bien qu'elle puisse être capturée en redirigeant vers un fichier. D'autre part, je peux forcer l'application à ouvrir une seconde console en effectuant un appel P/Invoke sur AllocConsole() à partir de kernel32. Ce n'est pas ce que je veux, cependant. Je veux que la sortie apparaisse dans la même fenêtre que celle à laquelle l'application a été appelée.Sortie vers la ligne de commande si elle est démarrée à partir de la ligne de commande
Voici le code saillant qui me permet de faire apparaître une console de la ligne de commande:
<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