World of Warcraft Autoinstaller

  • Hallo, ich hab vor gut 2 Tagen mit AutoIT angefangen und arbeite seit dem an einem Installationsscript für World of Warcraft. Im grunde funktioniert alles, ich habe nur ein Problem:
    Nachdem die Installation von AutoIT gestartet wurde und das Installationsverzeichniss akzeptiert wurde reagiert mein Script nicht mehr. Sobald die Installation von World of Warcraft abgeschlossen ist,
    öffnet sich ein Launcher, den ich gerne schließen würde.
    Ich habe folgendes Probiert:

    [autoit]

    ControlClick("Installationsverzeichnis", "OK", "Button1")
    If ProcessExists("launcher.exe") > 0 Then
    $WoW_launcher = ProcessExists("launcher.exe")
    $WoW_installer = ProcessExists("installer.exe")
    ProcessClose($WoW_launcher)
    ProcessClose($WoW_installer)
    EndIf

    [/autoit]

    Es passiert aber absolut gar nichts. Ich habe sogar probiert, den Installer sofort nach der festlegung des Installationsverzeichnisses zu schließen:

    [autoit]

    ControlClick("Installationsverzeichnis", "OK", "Button1")
    $WoW_installer = ProcessExists("installer.exe")
    ProcessClose($WoW_installer)

    [/autoit]

    Nichts ist passiert. Das Script wird mit "#RequireAdmin" ausgeführt und sollte von daher über ausreichend Rechte verfügen.
    Ich hoffe ihr könnt mir helfen :D

    Gruß LordofWar

  • Hey hey, ich habe auch mal sowas gemacht, und dabei eigentlich nur mit der autostart gearbeitet...
    Die Frage ist nun, wie willst du es installieren? von der CD aus oder per .exe auf dem rechner?

    Greez
    Skilkor

  • Falsch siehe Hilfe...

    Zitat


    Rückgabewert
    Erfolg: Gibt die PID des Prozesses zurück.
    Fehler: Gibt 0 zurück, wenn der Prozess nicht existiert.

    Der Fehler liegt wohl eher darin, dass nur ein einziges mal unmittelbar nach dem Button Click auf den Prozess geprüft wird. Der Prozess existiert vllt erst einige ms später. Deswegen sollte man in einer Schleife solange prüfen bis der prozess existiert und dann eben processclose.

  • Habe das ganze mal für nen Privatserver gebaut.
    Komplettinstallation incl patchen bis patchstand des Servers. Geb das SCript ungern her hat ja nur 2000 Zeilen. ^^

    hab dir mal nen Teil rauskopiert.

    Spoiler anzeigen
    [autoit]


    ;____EoF - reportviaftp()____________________________________________________________
    ;####################################################################################
    ;____Func - Installwowpfad()_____________________________________________________
    Func Installwowpfad()
    $installation = FileSelectFolder($language[57], "", 1)
    If @error = 1 Then
    Exit
    Else
    $msgboxts = MsgBox(4, "", $language[59] & $installation & @CRLF & $language[60])
    EndIf
    If $msgboxts = 6 Then
    Installwow()
    Else
    Global $installation = FileSelectFolder($language[57], "", 1)
    If @error = 1 Then
    Exit
    Else
    Installwow()
    EndIf
    EndIf

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

    EndFunc ;==>Installwowpfad
    ;_________________________________________________________
    ;###################################################################################
    ;____InstallWoW()____________________________________________________________________
    Func Installwow()
    logfile("Neu Installation WoW Verzeichnis: " & $installation)
    InetGet("http://download.4fansites.de/world_of_warcraft/client/installwow_dede_pc.zip", @TempDir & "\installwow_dede_pc.zip")
    If Not @error Then
    logfile("Download WoW Install erfolgreich")
    Else
    logfile("Download WoW Install fehler: " & @error)
    MsgBox(0, "RG WoW Installer", $language[61])
    EndIf
    TrayTip("RG WoW Installer", $language[44], 3, 1)
    _zip_unzipall(@TempDir & "\installwow_dede_pc.zip", @TempDir & "\installwow_dede_pc\", 0)
    Run(@TempDir & "\installwow_dede_pc\InstallWoW.exe")
    BlockInput(1)
    WinWait('"World of Warcraft"-Installationsprogramm', "World of Warcraft: Wrath of the Lich King")
    WinActivate('"World of Warcraft"-Installationsprogramm', "World of Warcraft: Wrath of the Lich King")
    ControlClick('"World of Warcraft"-Installationsprogramm', "OK", "Button1")
    ProcessWaitClose("InstallWoW.exe")
    TrayTip("RG Wow Installer", $language[80], 5, 2)
    $i = 30
    Do
    MsgBox(0, "Please wait 30 Seconds", $i, 1)
    $i = $i - 1
    Until $i = 0
    Imagesearch()
    Sleep(2000)
    Imagesearchok()
    WinWait("Endbenutzerlizenzvereinbarung")
    Sleep(1000)
    MouseClick("left")
    Send("{Down 180}")
    Sleep(1000)
    ControlClick("Endbenutzerlizenzvereinbarung", "&Zustimmen", "Button1")
    WinWait("Installationsverzeichnis")
    Sleep(1000)
    Send("{TAB 2}")
    Send($installation)
    ControlClick("Installationsverzeichnis", "&OK", "Button1")
    BlockInput(0)
    ProcessWait("Launcher.exe")
    ProcessClose("Launcher.exe")
    ProcessClose("Installer.exe")
    logfile("World of Warcraft installed: " & $installation)
    MsgBox(0, "", $language[79], 3)

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

    $wowpath = $installation
    Patchstatus()
    EndFunc ;==>Installwow

    [/autoit]
  • Skilkor
    Ich wollte die installation mit "installwow.exe " durchführen. Mit dem Tool wird WoW heruntergeladen und installiert, unterscheidet sich aber nicht von dem normalen Setup von der CD / DVD.

    misterspeed
    Vielen dank, werde ich sofort ausprobieren!

    Kev
    Danke für den kurzen Code-ausschnitt, der wird mir bestimmt weiterhelfen :)

    Gruß LordofWar

    ---Edit---
    Funktioniert immer noch nicht :(

    [autoit]

    ControlClick("Installationsverzeichnis", "OK", "Button1")
    BlockInput(0)
    ProcessWait("launcher.exe")
    ProcessClose("launcher.exe")
    ProcessClose("installer.exe")

    [/autoit]


    Wenn ich es so in den Code schreibe, funktioniert noch nicht mal

    [autoit]

    BlockInput(0)

    [/autoit]

    Gruß LordofWar

    Einmal editiert, zuletzt von LordofWar (15. April 2011 um 13:55)

  • Woher willst du wissen ob blockinput(0) nicht funktioniert? Mal in die Hilfe geschaut was die 0 macht? Davon mal ab braucht man das nur wenn man mit mouseclick und send arbeitet, da du aber controlclick verwendest dürfte es kaum sinn machen den Userinput zu blocken.

    Hier mal eine Schleifenlösung inklusive Debug Meldungen:

    [autoit]


    ControlClick("Installationsverzeichnis", "OK", "Button1")
    While ProcessExists("launcher.exe") = 0 ; Achtung kann zur Endlosschleife werden wenn der Prozess niemals gefunden wird
    ; es wäre sinnvoll hier einen Zähler oder einen Timer in Verbindung mit exitloop zu verwenden um eine Endlosschleife zu vermeiden
    Sleep(100)
    WEnd
    $WoW_launcher = ProcessExists("launcher.exe")
    MsgBox(0,"Debug:","hier sollte die PID stehen: " & $WoW_launcher)
    $debug = ProcessClose($WoW_launcher)
    if $debug = 0 Then
    MsgBox(0,"Fehler","Prozess konnte nicht beendet werden. Errorcode: " & @error) ; siehe Hilfe was der Error Code bedeutet
    Else
    MsgBox(0,"Alles ok","Prozess wurde beendet.")
    EndIf

    [/autoit]
  • misterspeed
    Am Anfang der Installation arbeite ich mit

    [autoit]

    mousemove() und mouseclick()

    [/autoit]

    da das Menü des Installers eine Art Flash oder etwas in der Richtung ist. Deshalb sind die Eingaben am anfang der Installation für den benutzer geblockt. Ich merke, dass blockinput(0) nicht funktioniert, da nach starten der Installation meine Eingaben immernoch geblockt werden. Deinen Vorschlag mit der Schleife habe ich gerade gestestet. Funktioniert leider auch nicht... Das Script führt keinen Befehl mehr aus, nachdem ich die Installation gestartet habe. Ich habe deinen Versuch mal in einem zweiten Programm mitlaufen lassen und da hat es funktioniert o_0. Ich poste euch mal den ganzen Installationsablauf...

    [autoit]

    Case $Button3
    $WoW_installdir = FileSelectFolder("In Welches Verzeichniss soll WoW geladen und installiert werden?", "", 1)
    DirCreate($WoW_installdir & "\Installer")
    InetGet("http://daukon.de/InstallWoW.exe", $WoW_installdir & "\Installer\InstallWoW.exe", 16, 0)
    BlockInput(1)
    MsgBox(64, "WoW", "Ab jetzt arbeitet das Programm voll automatisch. Lehn dich zurück oder beschäftige dich mit etwas anderem.",5)
    Run($WoW_installdir & "\Installer\InstallWoW.exe")
    WinWaitActive('"World of Warcraft"-Installationsprogramm')
    ControlClick('"World of Warcraft"-Installationsprogramm', "OK", "Button1")
    WinWaitActive("Installationsprogramm für World of Warcraft: Wrath of the Lich King")
    $Installpos = WinGetPos("Installationsprogramm für World of Warcraft: Wrath of the Lich King","")
    MouseMove($Installpos[0]+150, $Installpos[1]+250)
    sleep(5000)
    MouseClick("Left")
    sleep(100)
    MouseMove($Installpos[0]+250, $Installpos[1]+450)
    MouseClick("Left")
    sleep(100)
    MouseMove($Installpos[0]+725, $Installpos[1]+110)
    MouseClickDrag("", $Installpos[0]+725, $Installpos[1]+110, $Installpos[0]+725, $Installpos[1]+450,10)
    ControlClick("Endbenutzerlizenzvereinbarung", "Zustimmen", "Button1")
    WinWaitActive("Installationsverzeichnis")
    sleep(100)
    ControlSetText("Installationsverzeichnis", "", 1028, $WoW_installdir)
    sleep(100)
    While ProcessExists("launcher.exe") = 0 ; Achtung kann zur Endlosschleife werden wenn der Prozess niemals gefunden wird
    ; es wäre sinnvoll hier einen Zähler oder einen Timer in Verbindung mit exitloop zu verwenden um eine Endlosschleife zu vermeiden
    Sleep(100)
    WEnd
    $WoW_launcher = ProcessExists("launcher.exe")
    MsgBox(0,"Debug:","hier sollte die PID stehen: " & $WoW_launcher)
    $debug = ProcessClose($WoW_launcher)
    if $debug = 0 Then
    MsgBox(0,"Fehler","Prozess konnte nicht beendet werden. Errorcode: " & @error) ; siehe Hilfe was der Error Code bedeutet
    Else
    MsgBox(0,"Alles ok","Prozess wurde beendet.")
    EndIf

    [/autoit]
  • Öhm ja und wo drückst du den ok Button nachdem du das Installationsverzeichnis gesetzt hast? Das fehlt doch nun in deinem Script. Ohne Button dürfte ja vermutlich auch diese launcher.exe nicht gestartet werden.

  • misterspeed
    Ähm Okay... Ist mir gar nicht aufgefallen :huh: . Das mit dem BlockInput(0) geht schonmal. Werde dir nach der Installation sofort bescheid geben, ob es geklappt hat. Was mich allerdings wundert, ist, dass die Installation trotzdem gestartet wurde. Der Launcher hat sich nach abschluss auch geöffnet, aber das Script hat nichts mehr ausgeführt.

    Gruß LordofWar