nepixl
Goto Top

VB: Batchprogramm: Resultat zurückgeben an VB Form (Textfeld)

Hallo Admins,


sitze aktuell an einem kleinen Problem. Per VB wird das Tool NCFTP(.exe) gestartet, NCFTP arbeitet allerdings im CMDfenster.
Kann ich diese Ausgabe live in meine Textbox übertragen?

Aktuell führe ich den Befehl wie folgt aus:
        Dim startInfo As New ProcessStartInfo("ncftpput")  
        startInfo.UseShellExecute = True
        startInfo.Arguments = "-u " & User & " -p " & PW & " -R " & IP & " / " & Auswahl  
        Process.Start(startInfo)

Daraufhin öffnet sich eine CMD mit folgender Ausgabe:
(BILD1: batch_ausgabe)

Gerne möchte ich alles was das Tool von sich gibt, in eine Textbox übernehmen, also Fehler, Erfolg, Durchsatz, ...
Hättet Ihr mir eine Idee oder gar eine Lösung(sansatz) wie ich sinnvoll einen Stream zusammenzimmern kann?

Bin leider noch recht frisch in der Sache und stelle mich sicherlich recht dämlich an, habt Nachsicht! face-smile


Ich Danke im Voraus,
Grüße
PixL

Ps: Dieser Thread (Batch ausgabe in TextBox anzeigen lassen) hat mir leider nicht weitergeholfen.
batch_ausgabe

Content-Key: 339667

Url: https://administrator.de/contentid/339667

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: 133417
133417 02.06.2017 aktualisiert um 12:22:49 Uhr
Goto Top
Dim startInfo As New ProcessStartInfo("cmd.exe")  
With startInfo    
    .UseShellExecute = False
    .Arguments = "/c ncftpput -u " & User & " -p " & PW & " -R " & IP & " / " & Auswahl  
    .RedirectStandardOutput = True
    .RedirectStandardError = True
    .CreateNoWindow = True
End with
Dim proc as Process = Process.Start(startInfo)
proc.WaitForExit()
Dim strOut = proc.StandardOutput.ReadToEnd()
Dim strErr = proc.StandardError.ReadToEnd()
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(850)
If strOut <> "" Then  
       txtOut.Text = enc.GetString(proc.StandardOutput.CurrentEncoding.GetBytes(strOut))
End If
If strErr <> "" Then  
      txtOut.Text = enc.GetString(proc.StandardError.CurrentEncoding.GetBytes(strErr))
End If
StdErr kannst du genauso abfragen.

Ab und zu mal die Doku lesen :-P.

Gruß Bibersbaum
Mitglied: nepixl
nepixl 02.06.2017 um 11:49:15 Uhr
Goto Top
Hi BibersBaum,

vielen Dank für deinen Tipp.
Auch deine Edit-Variante scheint nicht ganz zu laufen.
NCFTP macht jetzt garnichts mehr und eine Ausgabe erhalte ich auch nicht. (Textfeld angepasst)

Grüße
Mitglied: 133417
133417 02.06.2017 um 11:52:19 Uhr
Goto Top
Geht hier einwandfrei ...
Mitglied: 133417
133417 02.06.2017 aktualisiert um 12:20:28 Uhr
Goto Top
Du musst die cmd.exe mit /c starten nicht ncftpput als ausführbare Datei face-wink. S.o.
Mitglied: nepixl
nepixl 02.06.2017 aktualisiert um 13:19:10 Uhr
Goto Top
Ohh, da hat sich noch einiges geändert in deinem Code.

Probiere es gleich nochmals.

Vielen Dank für Deine MÜhe! face-smile


Edit: Klappt doch nicht. Habe mal .CreateNoWindow = false gesetzt um zu sehen was passiert.
Genaugesagt: passiert garnichts. CMD öffnet sich, das wars. Dann gefühlte 10s garkeine Bedienung vom VB möglich. Textbox ebenfalls leer.
Ich glaube ich stelle mich gerade recht blöd an.
Ich mache mir übers We weiter Gedanken darüber - scheint nichts mehr im Kopf zu funktionieren.

Danke BibersBaum. face-smile
Mitglied: 133417
133417 02.06.2017 aktualisiert um 13:45:53 Uhr
Goto Top
Doch das funktioniert einwandfrei inkl. Umlaute Konvertierung, sonst würde ich das hier ja nicht posten.
Du solltest dir mal cmd /? zu Gemüte führen und mit einem einfachen Argumenten wie
/c ping -n 1 8.8.8.8 anfangen.
ShellExecute muss False sein damit stdout und stderr umgeleitet werden können.
Mitglied: nepixl
nepixl 02.06.2017 um 14:15:01 Uhr
Goto Top
Alles klar. Vielen Dank für deine Anstöße. Werde ich mir als gute-Nacht-Lektüre einverleiben. face-smile

Sonnigen Feierabend!

Gruß
PixL