Entwickler-Ecke

WinForms - Konsole über WinForm öffnen


tomo2403 - Di 14.08.18 19:21
Titel: Konsole über WinForm öffnen
Hi, :wink2:

ich habe zwei Projekte in einer Projektmappe. Eines ist eine WinForm und das andere eine KonsolenApp.
Ich möchte die KonsolenApp von der WinForm öffnen lassen so dass diese Angezeigt wird.
Habe aber keine Ahnunng wie das geht.

PS: Wenn mir jemand sagt wie ich beide Apps in ein Projekt bekomme wäre das auch nützlich. :)


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Di 14.08.2018 um 19:29


Th69 - Di 14.08.18 19:31

Wenn du ein Extra-Konsolenfenster öffnen möchtest, dann geht das mittels der WinAPI-Funktion AllocConsole, s. z.B. Attaching a Console to a WinForms application [https://www.codeproject.com/Tips/68979/Attaching-a-Console-to-a-WinForms-application].


tomo2403 - Mi 15.08.18 15:55

Ich sag's ja nur ungern aber, ...

das Funktioniert bei getrennten Projekten nicht! :(


Ralf Jansen - Mi 15.08.18 16:31

Na klar geht das. Möglicherweise in deinen beiden konkreten Projekten nicht die kennen wir aber auch nicht. Wie man es im allgemeinen macht und auch funktioniert, auch wenn es beliebig viele Projekte sind, ist verlinkt.


tomo2403 - Do 16.08.18 16:06

siehe Bild


lapadula - Do 16.08.18 16:53

Versuchs damit:


C#-Quelltext
1:
2:
3:
4:
5:
Process process = new Process();
process.StartInfo.FileName = "DeineKonsole.exe";        
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;        
process.Start();


Hier die Doku dazu:
https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.standardoutput?redirectedfrom=MSDN&view=netframework-4.7.2#System_Diagnostics_Process_StandardOutput

Alternativ: Du kannst Argumente in einem String Array übergeben und damit in deiner Konsole arbeiten.

C#-Quelltext
1:
System.Diagnostics.Process.Start("Pfad/deineKonsole.exe", Argumente[])                    


Th69 - Do 16.08.18 19:26

Dazu müßte aber das Projekt eigenständig kompiliert sein.

Warum nicht einfach das Konsolenprojekt als Verweis (reference) zu dem anderen Projekt hinzufügen und dann ganz normal die Klassen und dessen Methoden verwenden?

PS: Wir hatten dieses Thema die letzten Tage schon in System.IO.Compression.ZipFile ist nicht vorhanden [https://www.entwickler-ecke.de/viewtopic.php?t=117175]. Wenn du nicht weißt, wie man Verweise hinzufügt, dann schau dir den von Ralf Jansen [https://www.entwickler-ecke.de/user_Ralf%2520Jansen.html] geposteten Link an (nur daß du dann ein Projekt aus deiner Projektmappe hinzufügst, anstatt eine System-.NET-Assembly).


tomo2403 - Fr 17.08.18 13:16

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Dazu müßte aber das Projekt eigenständig kompiliert sein.

Warum nicht einfach das Konsolenprojekt als Verweis (reference) zu dem anderen Projekt hinzufügen und dann ganz normal die Klassen und dessen Methoden verwenden?

Wenn ich das anwende, wird die Konsole nur ausgeführt und nicht angezeigt.

Der Code von user profile iconlapadula funktioniert auch nicht. Ich kann zwar Text reinschreiben, aber ausgeführt wird nichts.


Christian S. - Fr 17.08.18 14:37

Hallo, tomo2403!

Ich möchte Dich bitten, mal ein bisschen mehr Eigeninitiative zu zeigen. Zum einen, indem Du selber versuchst, Fehlermeldungen zu verstehen und darauf aufbauend Lösungen zu versuchen. Und wenn Du dann damit nicht weiter kommst, hier möglichst präzise zu beschreiben, was Du versucht hast, was nicht funktioniert und welche Fehlermeldungen Du erhälst.

Es kann nicht so weitergehen, dass man Dir jede Information aus der Nase ziehen muss und Du anscheinend erwartest, dass Dir hier "kopierfertiger" Code präsentiert wird. Du willst programmieren. Wir helfen Dir gerne dabei, auch bei Grundlagen-Fragen. Aber wir werden nicht für Dich programmieren.

Grüße
Christian


lapadula - Mo 20.08.18 14:33

Bei mir gehts.

So öffnest du deine Konsolenanwendung in deiner WinForm-Anwendung und übergibts drei Argumente


C#-Quelltext
1:
2:
3:
4:
private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(@"C:\Users\myComputer\Documents\Visual Studio 2015\Projects\TestConsoleApplication\TestConsoleApplication\bin\x86\Debug\TestConsoleApplication.exe""Eins Zwei Drei");
        }


Und so in deiner Konsole, falls du die Argumente benutzen willst:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
static void Main(string[] args)
        {
            foreach (string item in args)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }


Damit die Konsole auch offen bleibt darfst du Console.Readline(); nicht vergessen, sonst läuft das einmal durch und geht automatisch wieder zu.