2016-07-25 10 views
0

Ich habe eine C# -Konsolenanwendung, die ich mit seinem Ausgabetyp auf "Windows-Anwendung" ausgeführt wird, um zu verhindern, dass die Konsole während der normalen Verwendung angezeigt wird. Ich möchte jedoch die Option, das Programm alternativ als eine Konsolenanwendung nach Belieben auszuführen, falls der Benutzer die Ausgabe der Konsole beheben und anzeigen möchte.Alternative Ausführen einer Konsole Anwendung als Exe und WinExe

Ist es möglich, ein Befehlszeilenargument an die ausführbare Datei zu übergeben, um die Anwendung je nach Wunsch des Benutzers entweder im "Konsolenmodus" oder im "Windows-Anwendungsmodus" auszuführen? Wenn nicht, gibt es eine andere Möglichkeit, im laufenden Betrieb zu ändern, wenn eine Anwendung die Konsole anzeigt oder nicht?

+1

Könnte hier aussehen: http://stackoverflow.com/questions/472282/show-console-in-windows-application – Styxxy

+0

AllocConsole() ist nicht nützlich. Erstellen Sie ein anderes Projekt im Konsolenmodus, und lassen Sie die Main() -Methode Process.Start + WaitForExit verwenden, um Ihre winapp.exe zu starten. Wenn Sie dieses kleine Programm auf winapp.com umbenennen, können Sie den Unterschied nicht erkennen. –

Antwort

0

Nein, das geht nicht. Es gibt einen grundlegenden Unterschied zwischen einer Konsolenanwendung und einer winforms-Anwendung, die sehr tief geht. Sobald die Anwendung kompiliert wurde, kann sie zur Laufzeit nicht mehr geändert werden.

0

Ich denke, Sie haben eine X-Y Problem. Das Grundproblem besteht darin, dass der Benutzer in der Lage sein soll, entweder eine Konsole oder ein WinForms-Programm auszuführen, die beide dasselbe tun. Eine Lösung wäre, ein einzelnes Programm zu haben, das als beides laufen kann, aber wie @roryap darauf hingewiesen hat, ist dies unmöglich.

Eine zweite Lösung wäre, die Geschäftslogik Ihres Programms in eine separate Bibliothek zu stellen. Sie können dann ein Konsolenprogramm schreiben, das auf diese Bibliothek zugreift, und eine WinForms-GUI, die ebenfalls auf diese Bibliothek zugreift. Der Benutzer entscheidet dann, welches Programm ausgeführt werden soll. Dies ist eine bewährte Methode zum Trennen einer Anwendung in mehrere Ebenen. Ich empfehle Ihnen diesen Weg zu gehen. Sie werden feststellen, dass Ihre Benutzeroberflächen (Konsole, WinForms) klein sind. Wenn Sie in Zukunft ein Web-Front-End oder ein WPF-Front-End erstellen möchten, müssen Sie nur den Front-End-Teil schreiben. Der Business-Logik-Layer wird nicht geändert.