.exe dateien in verschiedenen ordnern liegend öffnen

  • Hallo AutoIT Comunity,

    ich hab mir ein skript zusammen gestellt um einen Server eines spiels zu starten bzw. zu stoppen. Das geht darüber das man mehrere exe dateien öffnet bzw schliest.

    Das Problem das ich jetzt hab ist folgendes. Ich hab 2 verschiedene World Server welche in 2 unterschiedlichen Ordner liegen. Das ganz hab ich über die Funktion ShellExecute versucht zu lösen.
    Allerdings öffnet er mir dabei 2mal (so kommt es mir vor) den selben World server obwohl ich beim 2. den gesammten Pfad ab C:\ angegeben hab. (Wen 2mal der selbe world server gestartet wird bleibt der zweite hängen.)

    Ebenfals in einem anderem Ordner liegt eine sogennante Packetfilter.exe, welche er zwar startet aber dann mit der fehler meldung: can't read log.txt wieder beendet. Diese meldung muss an der Startweise von der function liegen.

    Mein jetziger Code:

    Spoiler anzeigen
    [autoit]

    #include

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Server Starten/Stoppen", 529, 317, 192, 123)
    $start = GUICtrlCreateButton("Server Starten", 120, 152, 129, 41, 0)
    $stop = GUICtrlCreateButton("Server Stopen", 304, 152, 129, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $start
    ShellExecute ( "AccountServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "DatabaseServer.exe" )
    Sleep ( 15000 )
    ShellExecute ( "Certifier.exe" )
    Sleep ( 3000 )
    ShellExecute ( "CoreServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "LoginServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "CacheServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "WorldServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "C:\Users\Administrator\Desktop\Server\102\Program\WorldServer.exe" )
    Sleep ( 3000 )
    ShellExecute ( "C:\Users\Administrator\Desktop\Server\Antihack\packetfilter.exe")
    Case $stop
    ProcessClose ("AccountServer.exe")
    Sleep ( 1000 )
    ProcessClose ("DatabaseServer.exe")
    Sleep ( 1000 )
    ProcessClose ("Certifier.exe")
    Sleep ( 1000 )
    ProcessClose ("CoreServer.exe")
    Sleep ( 1000 )
    ProcessClose ("LoginServer.exe")
    Sleep ( 1000 )
    ProcessClose ("CacheServer.exe")
    Sleep ( 1000 )
    ProcessClose ("WorldServer.exe")
    Sleep ( 1000 )
    ProcessClose ("WorldServer.exe")
    Sleep ( 1000)
    ProcessClose ( "packetfilter.exe")
    EndSwitch
    WEnd

    [/autoit]


    Das beenden funktioniert ohne Probleme.

    hoffe mir kann dabei einer helfen

    mfg
    drachenkaempfer

    Einmal editiert, zuletzt von drachenkaempfer (2. Dezember 2011 um 22:44)

  • Versuchs mal so :P

    Spoiler anzeigen
    [autoit]


    $aProgramms[10]
    $aProgramms[1] = 'AccountServer.exe'
    $aProgramms[2] = 'DatabaseServer.exe'
    $aProgramms[3] = 'Certifier.exe'
    $aProgramms[4] = 'CoreServer.exe'
    $aProgramms[5] = 'LoginServer.exe'
    $aProgramms[6] = 'CacheServer.exe'
    $aProgramms[7] = 'WorldServer.exe'
    $aProgramms[8] = 'C:\Users\Administrator\Desktop\Server\102\Program\WorldServer.exe'
    $aProgramms[9] = 'C:\Users\Administrator\Desktop\Server\Antihack\packetfilter.exe'

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

    $Form1 = GUICreate("Server Starten/Stoppen", 529, 317, 192, 123)
    $start = GUICtrlCreateButton("Server Starten", 120, 152, 129, 41, 0)
    $stop = GUICtrlCreateButton("Server Stopen", 304, 152, 129, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $start
    _start()
    Case $stop
    _stop()
    EndSwitch
    WEnd

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

    Func _start()
    For $i = 1 to UBound($aProgramms)-1
    ShellExecute($aProgramms[$i])
    ProcessWait($aProgramms[$i]) ; warte solange bis der Prozess gestartet ist
    Next

    EndFunc

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

    Func _stop()
    For $i = 1 To 7
    If ProcessExists($aProgramms[$i] Then
    ProcessClose($aProgramms[$i])
    ProcessWaitClose($aProgramms[$i]
    EndIf

    Next
    If ProcessExists('worldserver.exe') Then ProcessClose('worldserver.exe')
    If ProcessExists('packetfilter.exe') Then ProcessClose('packetfilter.exe')
    Exit
    EndFunc

    [/autoit]
  • Hey, also dieses Script ist natürlich nicht getestet da ich die Nötigen Anwendungen nicht habe.. du musst es dir natürlich anpassen wenn du noch Änderungen brauchst wie zb diese 15 Sekunden Wartezeit usw.. zb If $aProgramm[$i] = 'datenbankbla.exe' Then Sleep(1000) oder so..
    Die Errormeldung kann meiner Meinung nach in meinem Script nicht aufkommen da ich nirgendswo den Start einer Server-Start-Stop.exe ausführe 8|

    Gruß Marvin

  • Hi,

    das mit dem sleep hab ich jetzt eingefügt hoffe auch an der richtigen stelle.

    Diese Fehlermeldung bezieht sich nicht darauf das eine Server Start-Stop.exe ausgeführt wird sondern das in Line 1 (nach freier übersetzung ^^) ein "=" operator fehlt.
    Wen ich die line 1 lösche ($aProgramms[10]) dann verschiebt sich der fehler nur in die nächste zeile.

    Einmal editiert, zuletzt von drachenkaempfer (29. November 2011 um 11:18)

  • HI,

    ja jetzt siehts schonmal anders aus, allerdings bekomm ich immer noch ne meldung: Missing Subscript dimension in "Dim" statement.

    Ich glaub du musst mir noch genauer erklären wo und wie ich das "dim" einfügen soll :)

    Meine ersten 10 zeilen sehen momentan so aus:

    Spoiler anzeigen
    [autoit]

    Dim $aProgramms[10]
    $aProgramms[1] = 'AccountServer.exe'
    $aProgramms[2] = 'DatabaseServer.exe'
    $aProgramms[3] = 'Certifier.exe'
    $aProgramms[4] = 'CoreServer.exe'
    $aProgramms[5] = 'LoginServer.exe'
    $aProgramms[6] = 'CacheServer.exe'
    $aProgramms[7] = 'WorldServer.exe'
    $aProgramms[8] = 'C:\Users\Administrator\Desktop\Server\102\Program\WorldServer.exe'
    $aProgramms[9] = 'C:\Users\Administrator\Desktop\Server\Antihack\packetfilter.exe'

    [/autoit]

    mfg
    drachenkaempfer

    PS: ich arbeite noch nich solange mit AutoIT

  • Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Dim $aProgramms[10]
    $aProgramms[1] = 'AccountServer.exe'
    $aProgramms[2] = 'DatabaseServer.exe'
    $aProgramms[3] = 'Certifier.exe'
    $aProgramms[4] = 'CoreServer.exe'
    $aProgramms[5] = 'LoginServer.exe'
    $aProgramms[6] = 'CacheServer.exe'
    $aProgramms[7] = 'WorldServer.exe'
    $aProgramms[8] = 'C:\Users\Administrator\Desktop\Server\102\Program\WorldServer.exe'
    $aProgramms[9] = 'C:\Users\Administrator\Desktop\Server\Antihack\packetfilter.exe'

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

    $Form1 = GUICreate("Server Starten/Stoppen", 529, 317, 192, 123)
    $start = GUICtrlCreateButton("Server Starten", 120, 152, 129, 41, 0)
    $stop = GUICtrlCreateButton("Server Stopen", 304, 152, 129, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $start
    _start()
    Case $stop
    _stop()
    EndSwitch
    WEnd

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

    Func _start()
    For $i = 1 to UBound($aProgramms)-1
    ShellExecute($aProgramms[$i])
    ProcessWait($aProgramms[$i]) ; warte solange bis der Prozess gestartet ist
    Next

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

    EndFunc

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

    Func _stop()
    For $i = 1 To 7
    If ProcessExists($aProgramms[$i]) Then
    ProcessClose($aProgramms[$i])
    ProcessWaitClose($aProgramms[$i])
    EndIf
    Next

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

    If ProcessExists('worldserver.exe') Then
    ProcessClose('worldserver.exe')
    ElseIf ProcessExists('packetfilter.exe') Then
    ProcessClose('packetfilter.exe')
    EndIf
    Exit
    EndFunc

    [/autoit]

    Das Script sollte gehen ..

    Gruß

  • Teare jep und die ganzen Autostarter die im umlauf sind, sind endweder viren verseucht, haben backdoors oder funktionieren nicht richtig.

    @Protex danke das neue geht jetzt insoweit das er mir die server startet und stopt, allerdings viel zu schnell so das er die meisten mit ner fehlermeldung wieder beendet.
    Hab mich zwar mit dem befehl: If $aProgramm[$i] = '...server.exe' Then Sleep(1000) gespielt aber irgendwie komme ich nich dazu das er mir nach einfügen des befehls die server startet. Bekomme da jedes mal die meldung das der befehl nicht ausgeführt werden kann.

    Ich denk mal ich füge den an der falschen stelle ein. Wenst mir noch ungefähr sagen könntest wo ich den hintun soll dann wär ich schon fertig mit dem ganzen^^

    Ich hab mich daran versucht ihn in dem bereich einzufügen:

    Spoiler anzeigen
    [autoit]

    Func _start()
    For $i = 1 to UBound($aProgramms)-1
    ShellExecute($aProgramms[$i])
    ProcessWait($aProgramms[$i]) ; warte solange bis der Prozess gestartet ist
    Next

    [/autoit]

    mfg
    drachenkaempfer

  • Sorry aber ich kann dir doch nicht 100% deines Scriptes Schreiben.... ein bisschen Eigeninitiative wäre angebracht...woher soll ich wissen welche Programme nach dem schließen aus irgend einem Grund noch Zeit brauchen das Script führt beim dürcken des Stop Buttons die Funktion _Stop() aus diese Beendet alle Programme die im Array oben angegeben sind und wartet bis der Prozess nicht mehr esistiert dannach beendet er das nächste Programm.. wieso bei dieser Aktion Fehler auftreten weiß ich nicht.. einfach mal die Aktionen in der Console ausgeben mit ConsoleWrite('text') und dann schauen wo er hängen bleiben und wieso, die Autpit Console sagt dir im Normalfall in der Errormeldung schon woran er hängen geblieben ist und auch wieso.. einfach mal leesen und selber versuchen nicht einfach F5 mh geht nicht > neuer Post.. dabei lernt man ueberhaupt nichts..

    Gruß Marvin

  • Das du mir 100 % davon schreibst war ja auch nicht meine absicht. Allerdings finde ich deine antwort darauf das ich geschrieben hab das ich mich mit dem sleep befehl gespielt hab und es trotzdem nich geschaft hab gemein.

    Habs trotzdem jetzt geschaft

    Danke für deine Hilfe

    MFG
    drachenkaempfer