GUI- und Konsolenanwendung in einem?

Hallo,
kennt jemand einen Lösung für dieses Problem:

Ich würde gerne eine Anwendung mit GUI starten wenn sie ohne jeglichen Parametern aufgerufen wird aber als Kommandozeilenanwendung, wenn beim Aufruf eine Parameter übergeben wurde.
Genauer gesagt, wird die Anwendung per Kommandozeile konfiguriert, soll keine GUI angezeigt werden, sondern die Ausgaben sollen in der Kommandozeile landen.

Konfiguriere ich allerdings in VS eine Anwendung als Konsolenanwendung, so bekommen ich immer ein Konsolenfenster, auch dann wenn ich die GUI anzeigen will. Konfiguriere ich die Anwendung als Windowsanwendung, scheine ich keine Konsolenausgaben machen zu können mit Console.Writeln();

Vielen Dank für jeden Tipp,
Dirk

Hi!

Ich hab’s noch nie gemacht, aber das sollte in der Datei Program.cs schon funktionieren:

static class Program
{
///
/// Der Haupteinstiegspunkt für die Anwendung.
///
[STAThread]
static void Main(string[] args)
{
//pseudo code
if string.count == 0
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}

Nachtrag:

Deine Funktionen die Du in beiden Fällen aufrufen willst kannste dann aber nicht direkt in der Form lassen, musst die dann in andere Klassen auslagern.

Sebo

Danke, doch soweit war ich auch schon. Das Problem hierbei ist, dass zusätzlich zu dem jetzt geöffneten Fenster immer noch ein Konsolenfenster angezeigt wird. Das will ich aber nicht … :frowning:

Grüße,
Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hat wirklich keiner davon Ahnung?
%

Du kannst eine WinForms-Anwendung in VS erstellen. Damit hast du keine Konsole. Wenn du nun nachträglich eine haben willst, kannst du mittels P/Invoke http://msdn2.microsoft.com/en-us/library/ms681944.aspx aufrufen und eine Konsole erzeugen.

Hi und Danke!

Falls nochmal jemand danach sucht:
Mein Problem konnte ich mit der Funktion
AttachConsole() lösen.
Ich hab folgende Methode in der Klasse mit der Main()-Methode deklariert:

[DllImport("kernel32.dll")]
public static extern bool AttachConsole(int ProcessId);

und diese dann mit

AttachConsole(-1);

aufgerufen, um die Konsole aus der der Programmaufruf kam zu verwenden.

Du kannst eine WinForms-Anwendung in VS erstellen. Damit hast
du keine Konsole. Wenn du nun nachträglich eine haben willst,
kannst du mittels P/Invoke
http://msdn2.microsoft.com/en-us/library/ms681944.aspx
aufrufen und eine Konsole erzeugen.