[C#] Konsole oder GUI in Abhängigkeit der Argumente?

Gobble-G

Lieutenant
Registriert
Nov. 2002
Beiträge
727
Hallo,

wie kann ich in einem C#-Programm zeitig zur Laufzeit manipulieren (z.B. durch Programmzeilenargumente), dass das Programm ausschließlich als GUI- oder ausschließlich als Konsole-Applikation ausgeführt wird?

Danke und Gruß,
Gobble-G
 
Das wird imho nicht möglich sein, da dass schon eine Compileroption ist.
sry für die späte Antwort, war im Urlaub :)

mfg
 
Hallo Gobble-G,

wieso startest du nicht einfach das Programm als Console und fragst nach Parametern mit Console.WriteLine(); und wenn der Paramter dabei war dann erstellst du halst die Form.
Sollte nicht so schwer sein.

Grüße

tewes
 
@tewes: Weil man in diesem Fall immernoch die Konsole sieht, wenn sich die GUI öffnet. Man kann diese dann zwar schließen, aber man sieht sie eben doch kurz.

Es scheint so, als hätte Backslash recht, aber vielleicht gibt es einen Workaround. Zwischenzeitlich habe ich weitergeforscht und probiert. Folgendes müsste erfüllt sein, damit ich zufrieden bin:
  1. Aus der Konsole ohne Parameter gestartet, soll sich die GUI öffnen.
  2. Aus der Konsole mit Parameter gestartet, soll das Programm ohne GUI ausgeführt werden.
  3. Aus Windows (ohne Konsole) heraus ohne Parameter gestartet, soll sich die GUI öffnen.
  4. Aus Windows (ohne Konsole) heraus mit Parameter gestartet, soll sich eine Konsole öffnen und das Programm ausgeführt werden.

Mein Code sieht zur Zeit so aus und erfüllt eigentlich alle 4 Punkte:
Code:
        ...
        
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool AttachConsole(int ProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool AllocConsole();

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool FreeConsole();

        static int Main(string[] args)
        {
            if (args.Length > 0 && inStringArray(args,"/c"))
            {
                //try to attach to existing console. if it fails alloc to console
                if (!AttachConsole(-1)) AllocConsole();

                ...

                FreeConsole();
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainWindow());
            }
            return 0;
        }

        ...
Das Programm ist im VS als eine Windows-Anwendung markiert. Ist der Parameter /c gegeben, wird versucht, dass Programm mit AttachConsole() mit der Konsole "zu verknüpfen". Klappt das nicht, wird mit AllocConsole() eine neue Konsole geöffnet.
Wenn ich nun aber meine Applikation aus einer Konsole heraus im Konsole-Modus starte, dann beendet sich das Programm und zeigt den Command-Prompt nicht an, obwohl er da ist. Das ist noch etwas nervig und es wäre schön, wenn es dafür noch eine Lösung gäbe...
 
Kannst du nicht über das Sting[] Args Array die Parameter entgegen nehmen und dann entscheiden was zu tun ist?
 
Zurück
Oben