Update Funktion gesucht

  • Hey,

    Ich habe mich schon durch alle Threads geblättert und auch schon bei google gesucht. Doch kein Script funktioniert bei mir...
    Entweder mache ich etwas falsch oder, ach ich weis auch nicht.

    Könnte mir jemand helfen eine Update Fukntion an land zu bekommen? Wäre recht dankbar.

  • Hallo ophiel,
    deine "Frage" gehört in den Thread "Mit Gegenleistung" oder "Ohne Gegenleistung", dort können wir dir ein Skript erstellen das auf deine Wünsche zugeschnitten ist.
    Grundsätzlich ist eine Updatefunktion nicht allzuschwer, du brauchst folgende Kenntnisse:
    FTP
    Du brauchst unbedingt FTP Kentnisse, einen FTP Server, auf dem du eine .TXT hochlädsts (Sei es Version.txt) und mit der Internen vergleichst welche Version das ist.
    Dann brauchst du noch die Aktuelle .exe und downloadest diese, erstellst dir eine temporäre Datei, schließt dein altes Script, führst davor die temporäre .exe (am besten auch AutoIt) aus und hast darin "Sleep(5000)", "FileMove(@ScriptDir&"\Programm.exe", "PfadWoDasProgrammReplacedWerdenSoll", 1)" und ja das wäre es dann eigentlich :thumbup:

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • jaja ganz dumm bin ich auch nicht...

    ich habe natürlich schon nen server aber trozdem willst nicht aber naja (danke für deine hilfe...)

  • Ach warte, ich vergaß noch etwas wichtiges.
    Das ganze geht auch über Directlink und InetGet() oder InetRead(), das wäre dann ohne die LogIn Daten zu verwenden, ein beispiel zu dem Script, warte ich kram mal meinen MCPatcher hervor:

    Spoiler anzeigen
    [autoit]


    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\Grafik\Icon.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <GUIListView.au3>
    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6 (.NET CLR 2.0.50727)")
    Global $V = "1.2_01"
    Global $LGUI, $LabelState
    #Region ### START Koda GUI section ### Form=
    Global $Patcher = GUICreate("Minecraft Patcher", 400, 207, -1, -1)
    $Label1 = GUICtrlCreateLabel("Minecraft Patcher 1.2_01", 85, 8, 250, 28)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("©Mattthias", 340, 184, 56, 17)
    $Patch = GUICtrlCreateButton("Patch Minecraft", 163, 176, 91, 25, $WS_GROUP)
    $PatchListView = GUICtrlCreateListView("Version|Date|Note", 8, 48, 380, 126)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 110)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 110)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 150)
    #EndRegion ### END Koda GUI section ###

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

    Global $Update, $Patches, $Dates, $Notes
    _StartUp()
    Global $LPatches[UBound($Patches) - 1]
    _AddPatches()
    GUISetState(@SW_SHOW, $Patcher)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Patch
    _DownloadPatch()
    EndSwitch
    WEnd

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

    Func _StartUp()
    $LGUI = GUICreate("Loading Ressources", 250, 50, -1, -1, $WS_CAPTION)
    $LabelState = GUICtrlCreateLabel("Checking for Updates", 15, 7, 250, 50)
    GUISetState(@SW_SHOW, $LGUI)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    $Update = BinaryToString(InetRead("http://mattthias.bplaced.net/Info/Version.txt"))
    If $Update <> $V Then
    MsgBox(0, "Update", "New Update avaible." & @CRLF & "Please visit us and download version " & $Update & ".")
    EndIf
    GUICtrlSetData($LabelState, "Checking for Patches")
    $Patches = StringSplit(BinaryToString(InetRead("http://mattthias.bplaced.net/Info/Patches.txt")), "#")
    $Dates = StringSplit(BinaryToString(InetRead("http://mattthias.bplaced.net/Info/Dates.txt")), "#")
    $Notes = StringSplit(BinaryToString(InetRead("http://mattthias.bplaced.net/Info/Notes.txt")), "#")
    GUICtrlSetData($LabelState, "Finished")
    Sleep(500)
    GUICtrlSetData($LabelState, "Finished.")
    Sleep(500)
    GUICtrlSetData($LabelState, "Finished..")
    Sleep(500)
    GUICtrlSetData($LabelState, "Finished...")
    Sleep(500)
    GUISetState(@SW_HIDE, $LGUI)
    EndFunc ;==>_StartUp
    Func _AddPatches()
    If $Patches[0] = 0 Or $Dates[0] = 0 Or $Notes[0] = 0 Then
    MsgBox(0, "Error", "Fail to get Data, please restart program.")
    Exit
    Else
    For $i = 1 To UBound($Patches) - 1
    $LPatches[$i - 1] = GUICtrlCreateListViewItem($Patches[$i] & "|" & $Dates[$i] & "|" & $Notes[$i], $PatchListView)
    Next
    EndIf
    EndFunc ;==>_AddPatches
    Func _DownloadPatch()
    Local $SelectPatch = _GUICtrlListView_GetSelectedIndices($PatchListView, True)
    If $SelectPatch[0] = 0 Then
    MsgBox(0, "Error", "No patch selected.")
    ElseIf $SelectPatch[0] > 1 Then
    MsgBox(0, "Error", "Select only one patch.")
    ElseIf $SelectPatch[0] = 1 Then
    Local $LPatch = _GUICtrlListView_GetItemText($PatchListView, $SelectPatch[1])
    __Download($LPatch)
    EndIf
    EndFunc ;==>_DownloadPatch
    Func __Download($LPatch)
    DirCreate(@ScriptDir & "\TMP")
    Local $DGUI = GUICreate("Patch", 326, 75, -1, -1, $WS_CAPTION)
    Local $DLabel = GUICtrlCreateLabel("Downloading", 8, 24, 310, 28)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    GUISetState(@SW_HIDE, $Patcher)
    GUISetState(@SW_SHOW, $DGUI)
    Local $DSize = (InetGetSize("http://mattthias.bplaced.net/Patches/" & $LPatch & ".zip")) / 1024
    Local $Download = InetGet("http://mattthias.bplaced.net/Patches/" & $LPatch & ".zip", @ScriptDir & "\TMP\TempPatch.zip", 3, 1)
    Local $Timer = TimerInit()
    Do
    If TimerDiff($Timer) >= 200 Then
    GUICtrlSetData($DLabel, "Downloading: " & Round(InetGetInfo($Download, 0) / 1024) & " KB / " & Round($DSize) & " KB")
    $Timer = TimerInit()
    EndIf
    Until InetGetInfo($Download, 2) = True
    GUICtrlSetData($DLabel, "Installing")
    _BuildInZIP(@ScriptDir & "\TMP\TempPatch.zip", @ScriptDir & "\TMP", True)
    DirMove(@ScriptDir & "\TMP\bin", @AppDataDir & "\.minecraft", 1)
    ;DirRemove(@ScriptDir & "\TMP", 1)
    GUICtrlSetData($DLabel, "Finish")
    Sleep(500)
    GUICtrlSetData($DLabel, "Finish.")
    Sleep(500)
    GUICtrlSetData($DLabel, "Finish..")
    Sleep(500)
    GUICtrlSetData($DLabel, "Finish...")
    Sleep(500)
    GUISetState(@SW_HIDE, $DGUI)
    GUISetState(@SW_SHOW, $Patcher)
    EndFunc ;==>__Download
    ;===============================================================================
    ; Function Name: _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=True, $iIndexBase=1, $fOverwrite=True)
    ; Description: Erstellt aus einer Datei od. einem Array von Dateien eine ZIP-Datei
    ; mit Hilfe der Windows eigenen ZIP-Funktion
    ; Parameter(s): $sPath Pfad der zu erstellenden ZIP-Datei // Bestehenden ZIP-Datei
    ; $s_a_ToZip String der Einzeldatei oder Array der zu zippenden Dateien
    ; // Pfad des Zielordners, in den entpackt werden soll
    ; $fUnZip=True Entpacken=True, Packen=False (Standard)
    ; $iIndexBase Index Basis (erstes Element mit Pfad) des übergebenen Arrays (0 od.1)
    ; $fOverwrite Falls $sPath existiert ==> Überschreiben (Standard=True)
    ; Return Value(s): Erfolg 1
    ; Fehler set @error 1 - Überschreiben aus, aber Zieldatei existiert
    ; 2 - Zieldatei endet nicht auf ".zip"
    ; 3 - zu komprimierende Datei existiert nicht
    ; @extended: Anzahl der fehlenden Dateien
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _BuildInZIP($sPath, $s_a_ToZip, $fUnZip = False, $iIndexBase = 1, $fOverwrite = True)
    Local $fh, $sNul = '', $sZIPHeader, $objShell = ObjCreate("Shell.Application"), $objZipOrdner, $err = 0
    $sPath = FileGetLongName($sPath, 1)
    If $fUnZip Then
    Local $temp, $objZip
    If Not FileExists($s_a_ToZip) Then DirCreate($s_a_ToZip)
    $temp = $objShell.Namespace($s_a_ToZip)
    $objZip = $objShell.Namespace($sPath)
    $temp.CopyHere($objZip.Items)
    Return 1
    EndIf
    If (Not $fOverwrite) And FileExists($sPath) Then Return SetError(1, 0, 0)
    If StringRight($sPath, 4) <> '.zip' Then Return SetError(2, 0, 0)
    For $i = 1 To 18
    $sNul &= Chr(0)
    Next
    $sZIPHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6) & $sNul
    $fh = FileOpen($sPath, 10)
    FileWrite($fh, $sZIPHeader)
    FileClose($fh)
    $objZipOrdner = $objShell.Namespace($sPath)
    If Not IsArray($s_a_ToZip) Then
    If Not FileExists($s_a_ToZip) Then Return SetError(3, 1, 0)
    $objZipOrdner.CopyHere($s_a_ToZip)
    Sleep(1000)
    Return 1
    EndIf
    For $i = $iIndexBase To UBound($s_a_ToZip) - 1
    If Not FileExists($s_a_ToZip[$i]) Then
    $err += 1
    ContinueLoop
    EndIf
    $objZipOrdner.CopyHere($s_a_ToZip[$i])
    Sleep(1000)
    Next
    If $err Then Return SetError(3, $err, 0)
    Return 1
    EndFunc ;==>_BuildInZIP

    [/autoit]


    Friss und stirb - Würde meine Lehrerin sagen ^^, guck es dir an und finde was wo zusammengehört, fürs Kommentieren blieb keine Zeit mehr :P

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hehe geilo,
    wenn ich es richtig sehe, Matthias, dann wird das ganze als Zip gepackt/entpackt ?

    @ ophiel -> Sorry aber das keins bei dir geht kann einfach nicht stimmen.
    Du machst bestimmt etwas falsch.
    ch habe eine Updatefunktion von dem Forum hier und die funktioniert erste Sahne.
    Guck dir am besten nochmal genau alles an und nehme immer Threads die "Gelöst" sind, wenn du auf Nummer sicher gehen möchtest.

    Liebe Grüße von Steve

  • TechiTom, das ist das gesamte Script, ein Teil davon ist die Download& FileReplace funktion, Updatefunktion, ich hatte aber nicht die Lust das ganze noch einmal durchzugehen da ich dieses Projekt bereits zu den Akten gelegt habe.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Nice, wirklich Nice 8)

    Werd ich mir auch mal anschauen, villeicht kann ich davon etwas übernehmen, das mit dem Zip gefällt mir, darum habe ich ja oben gefragt (allerdings hatte ich den Post oben editiert weil meine Frage zu blöd war)

    Liebe Grüße, Steve

  • Ich habe eine Updatefunktion von dem Forum hier und die Funktioniert erste Sahne.

    wäre nett gewesen wenn du die Lösung nennst.

    Guck dir am besten nochmal genau alles an und nehme immer Threads die "Gelöst" sind, wenn du auf Nummer sicher gehen möchtest.

    und was ist dann mit den wohl besten Lösungen im Forum Skripte? Wobei im Forum H&U nach meiner Schätzung aus Bequemlichkeit leider über 2/3 offen bleiben. Aber auch anders herum in vielen gelösten Threads werden nur die Lösungshinweise bzw. Skriptteile gepostet ist also auch keine Garantie auf ein fertiges fehlerfreies Skript.


    ich habe natürlich schon nen server aber trozdem willst nicht aber naja (danke für deine hilfe...)

    die meisten Freehoster verhindern Zugriffe von AutoIt die über InetGet, InetRead, _InetGetsource also HTTP erfolgen, dagegen hilft es den HTTP Useragenten anders zu setzen, z.B.:

    [autoit]

    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.16")

    [/autoit]

    Afair hat Schnuffel einen Updater in seiner Signatur,

    mfg autoBert

  • und was ist dann mit den wohl besten Lösungen im Forum Skripte? Wobei im Forum H&U nach meiner Schätzung aus Bequemlichkeit leider über 2/3 offen bleiben. Aber auch anders herum in vielen gelösten Threads werden nur die Lösungshinweise bzw. Skriptteile gepostet ist also auch keine Garantie auf ein fertiges fehlerfreies Skript.


    Ohja da gebe ich dir natürlich recht, da muss ich mich verbessern.
    Viele Threads die nicht geclosed sind, wurdne trotzdem "Gelöst".


    Hier die Seite:

    https://autoit.de/index.php?page…date#post208887

    => Da hattest du auch zur Lösung beigetragen AutoBert ^^


    Liebe Grüße Steve 8)

  • => Da hattest du auch zur Lösung beigetragen AutoBert ^^

    autoBert
    Ich habe das mal so eingebaut und muss sagen als Übergangslösung ist das eine echt tolle Sache!


    Da ging es aber nur um einen Teilbereich eines Updaters. Die Prüfung ob upgedatet werden muss ist nicht enthalten.

    @ophiel: in https://autoit.de/index.php?page=Thread&amp;threadID=20322 habe ich eine Automatischen Update eingebaut interessant für dich ist die letzte Region im Skript updater

    mfg autoBert

  • besteht das Problem noch?
    dann könnte ich das anbieten:

    Die Updateüberprüfung:

    Spoiler anzeigen
    [autoit]


    Func _CheckOnProgUpdate()

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

    Local $VersionRunningExe, $GetDateTimeRunningExe, $NameRunningExe
    Local $VersionNewExe, $GetDateTimeNewExe
    Local $CopyReturnValue = 0
    ;Local $UpdateServer = @LogonServer
    Local $UpdateServer = "dc.X.local"
    Local $XConnectUpdate = "\\" & $UpdateServer & "\Netlogon\Updates\XConnect.exe"

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

    $VersionRunningExe = FileGetVersion(@AutoItExe)
    $GetDateTimeRunningExe = FileGetTime(@AutoItExe, 1,1)
    $NameRunningExe = @ScriptName
    $VersionNewExe = FileGetVersion($XConnectUpdate)
    $GetDateTimeNewExe = FileGetTime($XConnectUpdate, 1,1)

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

    GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte" & @CRLF & @CRLF & "Es wird nach Programmupdates gesucht.")
    Sleep(500)

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

    ;If FileExists($XConnectUpdate) Then
    If $VersionNewExe > $VersionRunningExe Then

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

    GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte" & @CRLF & @CRLF& "Programmupdate wurde gefunden")

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

    GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte" & @CRLF & @CRLF& "Derzeitige Version = " & $VersionRunningExe & " Version auf Server = " & $VersionNewExe)
    sleep(1000)
    If $VersionNewExe > $VersionRunningExe Then

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

    GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Ein Moment bitte" & @CRLF & @CRLF& "Kopiervorgang neue Programmversion wurde gestartet.. ")

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

    $CopyReturnValue = FileCopy($XConnectUpdate, $DownloadDir ,8)

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

    If $CopyReturnValue = 0 Then

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

    MsgBox(16,"Fehler bei Programmupdate ........", _
    "Beim Kopieren der neuen Programmversion ist ein Fehler aufgetreten." _
    & @CRLF & @CRLF & " Bitte verständigen Sie den IT-Support " _
    & @CRLF & " Programm = XConnect.exe" _
    & @CRLF & " Version = " & $VersionRunningExe & " Datum = " & $GetDateTimeRunningExe _
    & @CRLF & @CRLF & " Das Programm wird mit der derzeitigen Version weiter ausgeführt!",10)

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

    Return 0 ;Kopieren fehlgeschlagen

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

    EndIf

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

    Return 1 ;Kopieren war OK
    Else

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

    Return 2 ;Keine Updates Verfügbar

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

    EndIf
    Else
    GUICtrlSetData($lbl_info, @CRLF & @CRLF & "Keine Udates verfügbar" & @CRLF & @CRLF& "Dies ist die aktuelle Version")
    Sleep(1000)
    EndIf

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

    EndFunc

    [/autoit]


    die Update exe:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If ProcessExists("XConnect.exe") Then

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

    SplashTextOn("Ein Moment bitte... ",@CRLF & "XConnect wird beendet .....","-1","100","-1","-1",0,"","","")
    Sleep(1000)
    ProcessClose("XConnect.exe")
    Sleep(1000)
    SplashOff()
    EndIf

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

    SplashTextOn("Ein Moment bitte... ",@CRLF & "XConnect.exe wird in XConnect.old umbenannt .....","-1","100","-1","-1",0,"","","")
    Sleep(1000)
    If FileExists(@ScriptDir & "\Download\XConnect.exe") Then

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

    FileMove(@ScriptDir & "\XConnect.exe",@ScriptDir & "\XConnect.old",1)

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

    EndIf
    SplashOff()

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

    SplashTextOn("Ein Moment bitte... ",@CRLF & "XConnect.exe wird installiert .....","-1","100","-1","-1",0,"","","")
    Sleep(1000)
    If FileExists(@ScriptDir & "\Download\XConnect.exe") Then

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

    FileMove(@ScriptDir & "\Download\XConnect.exe",@ScriptDir & "\XConnect.exe",1)

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

    EndIf
    SplashOff()

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

    SplashTextOn("Ein Moment bitte... ",@CRLF & "Installationsverzeichnis wird entfernt .....","-1","100","-1","-1",0,"","","")
    Sleep(1000)
    DirRemove(@ScriptDir & "\Download\", 1)
    SplashOff()
    RunWait("rasdial /DISCONNECT","",@SW_HIDE)
    Run("net use /delete * /YES","",@SW_HIDE)
    ;~ SplashTextOn("Bitte starten Sie XConnect neu.","-1","100","-1","-1",0,"","","")
    ;~ Sleep(1000)

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

    Run("XConnect.exe")
    exit

    [/autoit]

    Die Update exe ist in die abzudatende exe eingebunden und wird dann aufgerufen wenn die Überprüfung was findet.