@errorprobleme in Skript

  • Hi zusammen, ich komme einfach nicht weiter....

    Es gibt eine MsbBox mit der Abfrage [ja] [nein].
    Beim drücken von [ja] wird ein ShellExecuteWait ausgeführt, mit dem ein Programm gestartet wird das ein Skript ausführt...
    Wenn alles geklappt hat soll eine MsgBox mit "Erfolgreich" auftauchen
    Wenn`s nicht geklappt hat, eine MsgBox mit"Fehler !"

    Momentan ist es so, das immer die MsgBox mit "Erfolgreich" aufgeht, obwohl das nicht sein kann weil keine Verbindung zum Server besteht :cursing:

    Hier Mal das Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Service-Restart", 210, 63, 193, 100)
    $Label1 = GUICtrlCreateLabel("Wollen Sie den Dienst neu starten ?", 18, 8, 174, 17)
    $Button1 = GUICtrlCreateButton("Ja", 20, 32, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Nein", 110, 32, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $iResponse = MsgBox(36, "Neustart", "Sind Sie sicher? " & @CRLF & "Damit bestätigen Sie im folgenden Schritt, dass Sie den Support nicht erreichten! " & @CRLF & "Weiterhin wird eine E-Mail an Sie persönlich versendet.")
    If $iResponse = 7 Then
    MsgBox(64, "", "Abgebrochen !", 2)
    Exit
    ElseIf $iResponse = 6 Then
    ShellExecuteWait("c:\psexec\psexec", "\\192.168.10.1 c:\Install\test.cmd -u domaene\Admin -p Password -n 10", "", "");, @SW_HIDE)
    If @error = 1 Then

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

    MsgBox(16,"Fehler !", "Es konnte keine Verbindung zum Server aufgebaut werden")
    Else
    $iResponse_Y = MsgBox(64, "Erfolgreich", "Der Dienst wurde neu gestartet")
    If $iResponse_Y = 1 Then Exit
    EndIf
    EndIf
    Case $Button2
    $iResponse2 = MsgBox(64, "", "Der Dienst wird nicht neu gestartet")
    If $iResponse2 = 1 Then
    Exit
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Wäre toll wenn ihr mir da kurz weiterhelfen könntet.

    Grüße
    Mike

    Einmal editiert, zuletzt von Mike280399 (13. Oktober 2011 um 12:11)

  • Mit @error fragst Du ab, ob ShellExecute ein Problem hatte. Du möchtest aber wissen, ob PSEXEC erfolgreich lief. Wenn Du Glück hast, gibt PSEXEC dies über einen Returncode zurück. Den fragst Du so ab (wobei ich davon ausgehe, dass PSEXEC Retruncode 0 für "Alles OK" verwendet):

    [autoit]

    $iResult = ShellExecuteWait("c:\psexec\psexec", "\\192.168.10.1 c:\Install\test.cmd -u domaene\Admin -p Password -n 10", "", "");, @SW_HIDE)
    If $iResult <> 0 Then
    MsgBox(16, "Fehler !", "Es konnte keine Verbindung zum Server aufgebaut werden")
    Else
    $iResponse_Y = MsgBox(64, "Erfolgreich", "Der Dienst wurde neu gestartet")
    If $iResponse_Y = 1 Then Exit
    EndIf

    [/autoit]
  • Stimmt so nicht!

    Zitat

    aber...nur so: bei shellexecute kommt doch dann 1 raus ...


    Er hat aber nicht den Returncode von Shellexecute abgefragt (der ist 1 bei Erfolg) sondern auf @error getestet.
    Sein Problem war, dass er glaubte mit @error den Fehler von PSEXEC zu prüfen, tatsächlich aber Shellexecute prüft.

  • Schau Dir hier die Zeile 1 an. In der Variablen $iResult steht der Rückgabewert von PSEXEC.