Comspec - Commandline .exe mit Parametern

  • Nabend,

    ich habe:

    [Blockierte Grafik: http://img7.imageshack.us/img7/9216/unbenanntvpb.png]

    Jetzt möchte ich mit das ding mit @Comspec bzw. Shellexecute ansprechen, also Parameter übergeben, wie dort oben im Fenster und ich würde das Ding auch gern auslesen. Muss ja irgendwie feststellen ob die Verbindung erfolgreich war oder was an Datenmengen rausgeht.

    Leider scheiter ich grad irgendwie total mit dem @Comspec, nen Run krieg ich noch hin, aber das wars auch ^^
    kein "cd" oder ".exe aufruf" geschweige denn Parameter übergeben.

    Help ?(

    Thx

  • Eventuell So

    [autoit]


    $pid = Run(@ComSpec & " /c " & $file, @ScriptDir, @SW_HIDE)

    [/autoit][autoit][/autoit][autoit]

    While Sleep(50)
    $line = StdoutRead($pid)
    If $line <> '' Then
    Msgbox(2,'Cmd Rückgabe',$line)
    EndIf
    If Not ProcessExists($pid) Then ExitLoop
    Wend

    [/autoit][autoit][/autoit][autoit][/autoit]


    Edit: okay Run ist Käse xD kann man ja keine Parms übergeben , also mit ShellExecute :)
    damit sollte es eigentlich laufen :P

    Einmal editiert, zuletzt von Protex (1. Dezember 2011 um 09:05)

  • Wurde in der SB geklärt. Nur zur vollständigkeithalber hier nochmal das Script:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $foo = Run("C:\Program Files (x86)\Cisco Systems\VPN Client\vpnclient.exe connect profil", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    If $line <> "" Then
    ConsoleWrite("STDOUT gelesen:" & $line & @CRLF)
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    If $line <> "" Then
    ConsoleWrite("STDERR gelesen:" & $line & @CRLF)
    EndIf
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Chap? des funzt nit ^^
    there is nothing happening.

    if @error then msgbox(0,"",@error) gibt mir nen errorcode von 2 raus ;)

    //edit

    habs

    Einmal editiert, zuletzt von Kev (1. Dezember 2011 um 10:50)

  • wie krieg ich denn den Returncode raus?

    was ich da bekomme ist zwar auch schick, aber nen bissl viel an infos.nen return code würde es mir einfacher machen.

    also mit echo %errorlevel% krieg ich den code raus. versuche die Ganze zeit den Mist zu übergeben mit stdinwrite, an sich gehts auch laut successcode.
    Aber beim Read.......bekomm ich nix raus.

    Einmal editiert, zuletzt von Kev (1. Dezember 2011 um 11:56)

  • [autoit]

    Func vpn_disconnect()
    $date = @MDAY & "." & @MON & "_" & @HOUR & "_" & @MIN & "_" & @SEC & ".txt"
    $vpndir = "C:\Temp\VPN\logs\log_" & $date
    $foo = Run("C:\Program Files (x86)\Cisco Systems\VPN Client\vpnclient.exe disconnect", @SystemDir, @SW_SHOW, $STDIN_CHILD + $STDOUT_CHILD)
    StdinWrite($foo,"echo %errorlevel%") ;soll returncode ausgeben - Machts aber net :/
    StdinWrite($foo)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $line = StdoutRead($foo)
    If $line <> "" Then
    Filewrite($vpndir,$line)
    ExitLoop
    EndIf
    WEnd
    Endfunc

    [/autoit]
  • Moin,

    wie soll er denn den Rückgabewert ausgeben, wenn das Programm noch gar nicht fertig ist ?
    Entweder RunWait/ShellExecuteWait, dann ist aber nichts mit StdoutRead.
    Oder Run/ShellExecute, dann ist aber nichts mit Exitcode.


    Gruß
    Greenhorn


  • hau ich den Exitloop raus, hängt das Ding dauerhaft in der Schleife und das Prog. macht gar nichts mehr.
    Hab ich nun Testweise aber auch gemacht, Exit raus, StdoutRead rein.
    das log wird erstellt, aber ohne den Errorcode.

    Schreib ich den Kram direkt ins cmd, bekomm ich mein Returncode sauber ausgewertet.
    Der StdinWrite gibt mir auch nen Success zurück.

  • Wird den überhaupt etwas in die CMD geschrieben wenn StdinWrite machst?

    Also z.b.

    [autoit]

    StdinWrite($foo,"echo laal")

    [/autoit]

    bzw. probier es mal ohne echo also

    [autoit]

    StdinWrite($foo,"%errorlevel%")

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Naja da ich genau die Anzahl der Zeichen zurückbekomme die ich mit StdinWrite übergeben habe, scheint der das schon zu machen. Es kommt bloß bei dem Read nicht mit raus.

    Sprich ÜBergabe an sich funktioniert. Nur rausbekommen tu ich nur den Standardkram, welchen ich sowieso beim Read rausbekomme.

    VPN Tunnel disconnected etc...

  • Versuch mal den errorlevel mit

    [autoit]

    StderrRead

    [/autoit]

    auszulesen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.