Benutzer mit den meisten Antworten
Consolen-Ausgabe zu einer WinForm-Applikation

Frage
-
Hallo
ich habe eine bestehende WinForm-Applikation, in der ich in meinem Main-Programm einen Zusatz entwickelt habe, der via CommandArgument gestartet werden kann. In diesem Fall startet sich dann nicht die WinForm-Applikation, sondern es soll eben nur der Prozess (für Export von Daten) ausgeführt werden.
Ich möchte dazu aber eine Console.WritLine() aktivieren - besser gesagt, hätte ich das schon eingebaut - aber die Console geht beim Start der Applikation nie auf.
Was muss ich denn in meinem Fall noch einstellen bei der Applikation, dass ich für diese Export-Funktion eine Consolen-Ausgabe habe ???
Kann mir dazu bitte jemand einen Rat geben.
Danke & schönen Gruß
Michael
Michael Erlinger
Antworten
-
Hallo Michael,eine Möglichkeit zum Beispiel auch:
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WinKonsole { static class Program // im Programm.cs im Windows Forms-Projekt { /// <summary>Der Haupteinstiegspunkt für die Anwendung.</summary> [STAThread] static void Main(string[] args) { if (args.Length > 0) // wenn Du also das Programm mit Parameter aufrufst ... { AllocConsole(); // Kommandozeile, Console anzeigen KonsolenStart(args); } else { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } private static void KonsolenStart(string[] args) { Console.WriteLine("Kommandozeile = {0}", Environment.CommandLine); for (int i = 0; i < args.Length; ++i) Console.WriteLine("Argument{0} = {1}", i + 1, args[i]); Console.ReadLine(); } [DllImport("kernel32.dll")] private static extern bool AllocConsole(); } }
ciao Frank
- Als Antwort vorgeschlagen Konrad Neitzel Dienstag, 19. April 2011 12:22
- Als Antwort markiert M.Erlinger Mittwoch, 20. April 2011 06:56
Alle Antworten
-
Hallo Michael,
ich fürchte, Du hast hier ein kleines Problem, denn das Verhalten ist eben mehr oder weniger fest vorgegeben.
Du kannst den "Output Type" auswählen als Windows Application oder Console Application.
Bei einer Windows Application hast Du kein Konsolen Fenster und bei einer Console Application hast Du halt immer ein Konsolen Fenster. Du kannst den Ausgabe Typ jederzeit umstellen, aber dann hast Du bei der Nutzung als Windows Program leider immer das Konsolen Fenster mit offen, was ich als störend empfinde.
Eine Möglichkeit, dies beim Start der Applikation auszuwählen in Main() kenne ich nicht und ich fürchte, dass dies auch nicht möglich ist, da es von Windows gesteuert wird über den hinterlegten Typ in der erstellten Datei (PE32 bzw. PE32+ Header enthält halt solche Informationen). Ich bin jetzt nicht der große PE32 Spezialist, daher mag ich mich irren, aber derzeit ist dies mein Wissenstand.
Wir lösen diese Thematik immer wie folgt:
- Business-Logik getrentn in einer Class-Library
- Eigene Projekte für entsprechende Executables. Also mehrere Projekte für z.B. eine Windows Forms Anwendung und für ein Kommandozeilentool. Gemeinsamer Code wandert halt wirklich konsequent in eine gemeinsam genutzte Library.Ich hoffe, ich konnte etwas helfen.
Mit den besten Grüßen,
Konrad
-
Hallo Michael,eine Möglichkeit zum Beispiel auch:
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WinKonsole { static class Program // im Programm.cs im Windows Forms-Projekt { /// <summary>Der Haupteinstiegspunkt für die Anwendung.</summary> [STAThread] static void Main(string[] args) { if (args.Length > 0) // wenn Du also das Programm mit Parameter aufrufst ... { AllocConsole(); // Kommandozeile, Console anzeigen KonsolenStart(args); } else { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } private static void KonsolenStart(string[] args) { Console.WriteLine("Kommandozeile = {0}", Environment.CommandLine); for (int i = 0; i < args.Length; ++i) Console.WriteLine("Argument{0} = {1}", i + 1, args[i]); Console.ReadLine(); } [DllImport("kernel32.dll")] private static extern bool AllocConsole(); } }
ciao Frank
- Als Antwort vorgeschlagen Konrad Neitzel Dienstag, 19. April 2011 12:22
- Als Antwort markiert M.Erlinger Mittwoch, 20. April 2011 06:56
-
Hallo Konrad und Michael,
- das ist eine sehr schöne Lösung ..
das hört man gern, danke :-)
Deine saubere Trennung der Prozesse hat aber auch Charme. ... ~ Separation of Concerns.
ciao Frank