Problem mit Shell Command

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von v-go.

    Problem mit Shell Command

    Hallo Community,

    habe aktuell ein problem mit dem Befehlshell. Folgenden Code verwende ich in meiner Routine:

    VB.NET-Quellcode

    1. Shell("programm.exe -x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt


    Wenn ich diesen Code in der Eingabeaufforderung ausführe klappt er und die Ausgabe landet unter C:\temp. Wenn ich dies so per Shell in VB.net ausführe
    passiert nichts, die Datei wird auch nicht angelegt und ich habe keine Ahnung warum. Auch mit folgendem habe ich das Selbe Problem:

    Dim p As New Process
    p.StartInfo.UseShellExecute = False
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.FileName = "programm.exe"
    p.StartInfo.Arguments = "-x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt"
    p.Start()

    bzw. :whistling:

    Dim p As New Process
    p.StartInfo.UseShellExecute = True
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.FileName = "programm.exe"
    p.StartInfo.Arguments = "-x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt"
    p.Start()


    Keine Fehlermeldung, aber es passirt nichts ?(

    Weiss einer von euch Rat?
    Danke euch! :S

    v-go schrieb:

    wieso funktioniert es ... in der eingabeaufforderung?
    weil die Ausgabeumleitung per >> eine Eigenschaft der Shell ist.
    Wenn du diese Art von Ausgabeumleitung verwenden willst, musst du das Ganze der cmd.exe in den Rachen schieben und darfst nicht den Prozess mit dem Programm starten.

    Ansonsten musst du die Ausgabe in einem Stream des aufrufenden Programms abfangen und deine Ausgabedatei selbst schreiben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    v-go schrieb:

    wieso funktioniert es ... in der eingabeaufforderung?
    weil die Ausgabeumleitung per >> eine Eigenschaft der Shell ist.
    Wenn du diese Art von Ausgabeumleitung verwenden willst, musst du das Ganze der cmd.exe in den Rachen schieben und darfst nicht den Prozess mit dem Programm starten.

    Ansonsten musst du die Ausgabe in einem Stream des aufrufenden Programms abfangen und deine Ausgabedatei selbst schreiben.


    Aber warum geht es dann auch so nicht:

    Dim p As New Process
    p.StartInfo.UseShellExecute = True
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.FileName = "cmd.exe /c"
    p.StartInfo.Arguments = "programm.exe -x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt"
    p.Start()

    oder auch so leider nicht

    Dim p As New Process
    p.StartInfo.UseShellExecute = True
    p.StartInfo.RedirectStandardOutput = True
    p.StartInfo.FileName = "cmd.exe"
    p.StartInfo.Arguments = "/c programm.exe -x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt"
    p.Start()

    Danke im Vorraus
    @v-go

    petaod schrieb:

    weil die Ausgabeumleitung per >> eine Eigenschaft der Shell ist.
    Wenn du diese Art von Ausgabeumleitung verwenden willst, musst du das Ganze der cmd.exe in den Rachen schieben und darfst nicht den Prozess mit dem Programm starten.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Jetzt funktionierts und zwar etwas modifziert: Shell("cmd.exe /c " & "parameter")

    Warum es dann mit dem hier nicht funktioniert ist mir leider noch unklar, aber was soll´s:

    Dim p As New Process
    p.StartInfo.UseShellExecute = True
    p.StartInfo.FileName = "cmd.exe" bzw. "cmd.exe /c"
    p.StartInfo.Arguments = "/c programm.exe -x -d parameter -f parameter parameter >> C:\temp\ausgabe.txt"
    p.Start()

    Danke für eure Bemühungen! :thumbsup:
    Ich weiss nicht, was deine programm.exe macht.
    Vielleicht erwartet die, dass ein vernünftiges WorkingDirectory gesetzt ist.

    p.StartInfo.RedirectStandardOutput = True macht keinen Sinn, wenn du den Stream nicht abfängst.

    v-go schrieb:

    aber es passirt nichts
    ist natürlich eine wage Fehlerbeschreibung.

    Gib doch mal deine Kommandozeile anstatt in die shell in das Eingabefeld des Start-Buttons ein.
    Das entspricht eher einem Process.Start
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Das hatte ich vorher auch schon probiert mit

    VB.NET-Quellcode

    1. Process.Start("")

    p.StartInfo.RedirectStandardOutput = True macht einen sinn, weil ich ursprünglich das ergebnis aus der shell in einen string schreiben wollte, habe mich aber
    dann doch für pipe per >> entschieden ;)
    Allerdings habe ich das beim C&P hier nicht eingefügt...

    Zur Fehlerbeschreibung; es passiert nichts, es ist auch nichts passiert - keine Fehlermeldung und keine erstellte Datei, keine Meldung im Debugger :huh:
    Aber wie in meinem letzten Post beschrieben funktioniert es mit dem abgeänderten Shell Aufruf. Danke!