Externe Konsolenapp ansprechen und Meldungen anzeigen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Externe Konsolenapp ansprechen und Meldungen anzeigen

    Hi,

    ich möchte ein Programm, das man eigentlich nur über cmd verwendet, über VB ansprechen und das Ergebnis zurückbekommen und auf meiner ListBox auflisten.

    Zuerst ist mir "Shell()" eingefallen, aber damit konnte ich mein Ziel so ziehmlich nicht erreichen.

    Wie mache ich sowas am besten?

    mfg

    gfc
    Habe es mehrmals probiert, jedoch liefert es mir nicht das, was ich brauche.

    Ich muss ein CMD-Ähnliches Programm schreiben, damit dort wiederum ein c-compiler angesprochen wird (und bei fehler die meldungen angezeigt werden).

    gibt es eine andere möglichkeit oder ein verständlichere Hilfs-seite?

    mfg

    gfc
    starte es mit einer Instanz der System.Diagnostics.Process Klasse. Dort hast du dann Zugriff auf die 3 Basisstreams (In, Out, Err).
    Und wieso musst du ein "CMD-Ähnliches Programm" schreiben um einen c-compilter aufzurufen... Einen c-compiler aufrufen kannst du überal.
    System.Diagnostics.Process.Start("gcc", String.Format("{1} -o {2}", input, output))
    wenn mich nicht alles täuscht. Bei dir musst du halt die parameter in startinfo einfüllen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Hab mir mühe gegeben, aber es geht net :(

    Der String "ccompiler" steht: #input# -o #output#

    VB.NET-Quellcode

    1. If P_Language = "CCompiler" Then
    2. Command.Show()
    3. Command.textbox("Starting C Compiling...")
    4. Command.textbox("Set Arguments...")
    5. Dim y As String = ccompiler.Replace("#input#", "Projects\" & foldername & "\" & foldername & ".c")
    6. Dim z As String = y.Replace("#output#", "Projects\" & foldername & "\" & AppName)
    7. Dim x As String = start_pfad & z
    8. Debug.Print(z)
    9. Dim process As New Process
    10. process.StartInfo.FileName = "c_compiler\tcc.exe"
    11. process.StartInfo.Arguments = z
    12. process.StartInfo.WorkingDirectory = start_pfad
    13. process.StartInfo.UseShellExecute = False
    14. process.StartInfo.ErrorDialog = False
    15. process.StartInfo.RedirectStandardOutput = True
    16. Command.textbox("Calling C_Compiler...")
    17. process.Start()
    18. Command.textbox(process.StandardOutput.ReadToEnd)
    19. process.WaitForExit()
    20. Threading.Thread.Sleep(2000)
    21. Try
    22. Dim psi As ProcessStartInfo = _
    23. New ProcessStartInfo(Me.txtApplicationName.Text)
    24. Process_info = psi
    25. Process.Start(psi)
    26. Catch ex As Exception
    27. MessageBox.Show( _
    28. String.Format("Fehler beim Ausführen von ""{0}""!", _
    29. Me.txtApplicationName.Text), _
    30. Application.ProductName, _
    31. MessageBoxButtons.OK, _
    32. MessageBoxIcon.Exclamation)
    33. End Try
    34. ElseIf P_Language = "VisualBasic" Then


    Könnt ihr mir helfen?

    mfg

    gfc

    gfcwfzkm schrieb:

    Ich muss ein CMD-Ähnliches Programm schreiben

    Bau Dir eine Console-Applikation.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ???

    ich will keine ConsoleApp, wenn ich ne Form brauche. Und mit CMD-Ähnlich meine ich nicht das Design/Form, sondern dessen Funktion.
    Hast du nur den Anfang gelesen ? ^^ :D

    mfg

    gfcwfzkm schrieb:

    Hast du nur den Anfang gelesen ?

    Ja, ich habe ihn gelesen.
    Es gibt wohlweislich geringfügige Unterschiede zwischen einer Form-Anwendung und einer Console.
    Ich finde es hirnrissig, in einer Form-Anwendung eine Console nachbilden zu wollen.
    Nutze eine Console.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also...

    Ich erweitere mein Editor mit einem C_Compiler.
    Um diesen besser anzeigen und darstellen zu können, möchte ich eine Konsolen-ähnliches programm, wo der Compiler aufgerufen wird, jedoch auch die Errors, die es zurückgibt anzuzeigen...

    Und genau dies gelingt mir nicht...

    Deshalb brauche ich etwas help...

    mfg

    gfcwfzkm

    Vulpes schrieb:

    Wieso ist das hirnrissig? Dafür gibt's eine Menge Beispiele.

    Die Tatsache, dass es eine Menge Beispiele gibt, hat nichts damit zu tun, dass es h... ist. :thumbsup:
    @gfcwfzkm:
    Ich arbeite an einer C++-DLL, die Log-Ausgaben mit printf() in eine externe Console schreibt.
    Wenn ich unter Qt oder .NET eine Console bereitstelle, schreibt die DLL ihre Ausgaben genau in diese Console.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    uh, verlockend. =D

    jedoch habe ich viele Vorraussetztungen an solch einer dll, ebenso muss ich C hinkriegen, bevor ich zun nächst höheren gehe (C++)

    Ich verwende tcc.exe als Compiler, da es gut läuft, portabel ist und dazu recht klein is :)
    Die frage, wie so oft auch...

    Wie calle ich den Compiler richtig, damit ich auch error's bekomme?

    mfg
    also ich würde das mit der Stream-Umleitung der Process-Klasse machen.

    Und dann den Stream-Output in eine Richtextbox ausgeben.

    Da kann man dann problemlos draus kopieren, oder auch unnötiges blabla händisch weglöschen, wofür man bei Console sich an eine ganz annere Bedienung gewöhnen müsste.

    ErfinderDesRades schrieb:

    also ich würde das mit der Stream-Umleitung der Process-Klasse machen.

    Und dann den Stream-Output in eine Richtextbox ausgeben.

    Da kann man dann problemlos draus kopieren, oder auch unnötiges blabla händisch weglöschen, wofür man bei Console sich an eine ganz annere Bedienung gewöhnen müsste.

    hatten wir schon alles will er iwie nich. ?(


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Diagnostics
    2. Imports System.Runtime.InteropServices
    3. Friend Class MyConsole
    4. <DllImport("kernel32", SetLastError:=True)> _
    5. Public Shared Function AllocConsole() As Boolean
    6. End Function
    7. <DllImport("kernel32", SetLastError:=True)> _
    8. Public Shared Function FreeConsole() As Boolean
    9. End Function
    10. Public Shared Sub Init()
    11. Debug.Listeners.Clear()
    12. Dim con As New TextWriterTraceListener(Console.Out)
    13. Debug.Listeners.Add(con)
    14. End Sub
    15. Public Shared Function StartConsole() As Boolean
    16. Return AllocConsole()
    17. End Function
    18. Public Shared Function StopConsole() As Boolean
    19. Return FreeConsole()
    20. End Function
    21. End Class

    Einfach
    MyConsole.StartConsole()
    MyConsole.StopConsole()

    und fertig.
    Mit Init() hast Du einen Anhaltspunkt, wasDu schalten kannst, was alles angezeigt werden soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!