Ich habe eine C# -Anwendung, die eine GUI hat und hat seinen Ausgabetyp als Windows-Anwendung festgelegt. Ich möchte es auch von der Kommandozeile aus (über Parameter) aufrufen und somit muss es auch eine Konsolenanwendung sein. Gibt es eine Möglichkeit, meine Anwendung sowohl als Windows-Anwendung als auch als Konsolenanwendung auszuführen? Gibt es eine Möglichkeit, dies zur Laufzeit einzustellen oder ist es eine Kompilierzeiteinstellung?Geben Sie .NET-Programm eine Ausgabe von Windows-Anwendung und Konsole Anwendung
Antwort
Sie können die Konsole anschließen. Machen Sie den Code in Program.cs wie folgt aussehen:
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
AttachConsole(-1);
Console.WriteLine("");
Console.WriteLine("Running in console, press ENTER to continue");
Console.ReadLine();
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
Eine Windows Forms-Anwendung kann Befehlszeilenargumente akzeptieren. Sie müssen diesen Fall nur in Ihrer Hauptfunktion behandeln, bevor Sie das Hauptformular der Anwendung anzeigen.
static void Main(string[] args)
{
if (args.Length > 0)
{
// Run it without Windows Forms GUI
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
Auch Ihre Anwendungen Ausgabetyp als Windows-Anwendung eingestellt ist, können Sie es immer noch von der Kommandozeile aufrufen und Argumente übergeben.
Ändern Sie einfach Ihre Main-Methodendefinition zu: static void Main (string [] args) {...} und Sie haben Zugriff auf übergebene Argumente in 'args' Variable.
Es ist eine Kompilierungszeit Einstellung: es gibt eine target:
Option auf dem csc
Compiler. /target:winexe
erstellt eine Windows-Anwendung (d. H. Mit einer GUI); /target:exe
erstellt eine Konsolenanwendung. Beide Anwendungstypen können jedoch Befehlszeilenargumente akzeptieren.
Ich habe am Ende beide Gebäude - ich wollte ein echtes Windows-Programm und eine wahre Konsole-Anwendung. – DanDan
Diese Art von Arbeiten, aber es scheint ein bisschen skurril. Ich werde akzeptieren, aber ich habe zwei separate Anwendungen, Windows und Konsole. – DanDan
Das schrullige Bit ist wahrscheinlich, dass Sie in einer Konsole schreiben, die Sie nicht erstellt haben. Die Ausgabe wird gemischt. Sie können auch AllocConsole() verwenden, aber dann erhält es seine eigene. –