Hilfe bei Erstellung eines Updaters mit Gegenleistung

  • Hallo AutoIT'ler,
    vielleicht kann mir jemand von den Profis helfen bei der Erstellung eines Updaters.
    Im Spoiler ist bereits Code vorhanden, nur Leider funktioniert es noch nicht.

    Ich erhalte die Meldung:

    Code
    Linie 77 /File "C:\users\xxx\Desktop\UPDATE.au3
    _Update()
    ^ ERROR
    Error: Incorrect number of parameters in function call.

    Es soll nur nach einer neuen Version (.exe) auf dem FTP Server gesucht und ein Download angeboten werden.[/font]
    Falls es besser wäre, ich habe auch einen Download Server Zugang "[/font]download.lima-city.de"
    Ich biete für den, der mir bei der Lösung des Problems behilflich ist 20€ an.
    [/font]Sollte es sich länger hinziehen bin ich gern bereit auch mehr zu bezahlen[/font].

    Spoiler anzeigen
    [autoit]

    Global Const $INTERNET_FLAG_ASYNC = 0x10000000Global Const $INTERNET_FLAG_FROM_CACHE = 0x01000000Global Const $INTERNET_FLAG_OFFLINE = $INTERNET_FLAG_FROM_CACHE
    Func _FTP_Open($s_Agent, $l_AccessType = $INTERNET_OPEN_TYPE_DIRECT, $s_ProxyName = '', $s_ProxyBypass = '', $l_Flags = 0) If $__ghWinInet_FTP = -1 Then __FTP_Init() Local $ai_InternetOpen = DllCall($__ghWinInet_FTP, 'handle', 'InternetOpenW', 'wstr', $s_Agent, 'dword', $l_AccessType, _ 'wstr', $s_ProxyName, 'wstr', $s_ProxyBypass, 'dword', $l_Flags) If @error Or $ai_InternetOpen[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
    Return $ai_InternetOpen[0]EndFunc ;==>_FTP_Open
    Func _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive = 0, $i_ServerPort = 0, $l_Service = $INTERNET_SERVICE_FTP, $l_Flags = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) If $i_Passive == 1 Then $l_Flags = BitOR($l_Flags, $INTERNET_FLAG_PASSIVE) Local $ai_InternetConnect = DllCall($__ghWinInet_FTP, 'hwnd', 'InternetConnectW', 'handle', $l_InternetSession, 'wstr', $s_ServerName, 'ushort', $i_ServerPort, 'wstr', $s_Username, 'wstr', $s_Password, 'dword', $l_Service, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_InternetConnect[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
    Return $ai_InternetConnect[0]EndFunc ;==>_FTP_Connect
    Func _FTP_DirSetCurrent($l_FTPSession, $s_Remote) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPSetCurrentDir = DllCall($__ghWinInet_FTP, 'bool', 'FtpSetCurrentDirectoryW', 'handle', $l_FTPSession, 'wstr', $s_Remote) If @error Or $ai_FTPSetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
    Return $ai_FTPSetCurrentDir[0]EndFunc ;==>_FTP_DirSetCurrent
    Func _FTP_ListToArray($l_FTPSession, $Return_Type = 0, $l_Flags = $INTERNET_FLAG_NO_CACHE_WRITE, $l_Context = 0) Local $aArray[1] $aArray[0] = 0 If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray) $aArray = __FTP_ListToArray($l_FTPSession, $Return_Type, $l_Flags, 0, 1, $l_Context) Return SetError(@error, @extended, $aArray)EndFunc ;==>_FTP_ListToArray
    Func _FTP_FileGet($l_FTPSession, $s_RemoteFile, $s_LocalFile, $fFailIfExists = False, $dwFlagsAndAttributes = 0, $l_Flags = $FTP_TRANSFER_TYPE_UNKNOWN, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPGetFile = DllCall($__ghWinInet_FTP, 'bool', 'FtpGetFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile, 'wstr', $s_LocalFile, 'bool', $fFailIfExists, 'dword', $dwFlagsAndAttributes, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_FTPGetFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
    Return $ai_FTPGetFile[0]EndFunc ;==>_FTP_FileGet
    Func _FTP_Close($l_InternetSession) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $l_InternetSession) If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
    If $__gbCallback_Set = True Then DllCallbackFree($__ghCallback_FTP)
    Return $ai_InternetCloseHandle[0]EndFunc ;==>_FTP_Close
    Func _ArrayAdd(ByRef $avArray, $vValue) If Not IsArray($avArray) Then Return SetError(1, 0, -1) If UBound($avArray, 0) <> 1 Then Return SetError(2, 0, -1)
    Local $iUBound = UBound($avArray) ReDim $avArray[$iUBound + 1] $avArray[$iUBound] = $vValue Return $iUBoundEndFunc ;==>_ArrayAdd
    Func _ArrayMax(Const ByRef $avArray, $iCompNumeric = 0, $iStart = 0, $iEnd = 0) Local $iResult = _ArrayMaxIndex($avArray, $iCompNumeric, $iStart, $iEnd) If @error Then Return SetError(@error, 0, "") Return $avArray[$iResult]EndFunc ;==>_ArrayMax
    Func __FTP_Init() $__ghWinInet_FTP = DllOpen('wininet.dll')EndFunc ;==>__FTP_Init
    _Update()
    $sServerName = "ftp.lima-city.de"$sUserName = "Peter"$sPassword = "Password"$iCurrentVersion = "1.4"$sFileName = "ABC v"$sDir = "/Downloads"$fStartAfter = "True"$sDatatype = ".exe"
    Func _Update($sServerName, $sUserName, $sPassword, $iCurrentVersion, $sFileName, $sDir = "", $fStartAfter = True, $sDatatype = ".exe")
    Local $aFileListNEW[1], $iFileNameLen = StringLen($sFileName), $hFTP_Open, $hFTP, $aFileListOLD[1], $i, $hGUI_UPDATE, $idBtnJA_UPDATE, $idBtnNEIN_UPDATE, $iNewestVersion
    $hFTP_Open = _FTP_Open("UPDATE") If @error Then Return SetError(1, 1) $hFTP = _FTP_Connect($hFTP_Open, $sServerName, $sUserName, $sPassword) If @error Then Return SetError(1, 2) If $sDir <> "" Then _FTP_DirSetCurrent($hFTP, $sDir) If @error Then Return SetError(1, 3) $aFileListOLD = _Ftp_ListToArray($hFTP) For $i = 0 To $aFileListOLD[0] If StringLeft($aFileListOLD[$i], $iFileNameLen) = $sFileName Then _ArrayAdd($aFileListNEW, StringTrimRight(StringTrimLeft($aFileListOLD[$i], $iFileNameLen), 4)) Next $iNewestVersion = _ArrayMax($aFileListNEW) If @error Then Return SetError(1, 4) If $iNewestVersion <= $iCurrentVersion Then Return 1
    $hGUI_UPDATE = GUICreate("Neue Version verfügbar!", 300, 200) GUISetBkColor(0xF7F6F9, $hGUI_UPDATE) $idLbl = GUICtrlCreateLabel("Es ist eine neue Version ihrer Software verfügbar!" & @CRLF & @CRLF & "Möchten Sie sie jetzt aktualisieren?", 5, 5, 300, 300) GUICtrlSetFont($idLbl, 12) $idBtnJA_UPDATE = GUICtrlCreateButton("Ja", 50, 160, 50, 20) $idBtnNEIN_UPDATE = GUICtrlCreateButton("Nein", 170, 160, 50, 20) GUISetState(@SW_SHOW)
    While 1 Switch GUIGetMsg()
    Case $idBtnJA_UPDATE _FTP_FileGet($hFTP, $sFileName & $iNewestVersion & $sDatatype, @ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype) If @error Then Return SetError(1, 5) _FTP_Close($hFTP) If $fStartAfter Then ShellExecute(@ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype) Return $iNewestVersion
    Case $idBtnNEIN_UPDATE GUIDelete($hGUI_UPDATE) _FTP_Close($hFTP) Return 1
    Case $GUI_EVENT_CLOSE GUIDelete($hGUI_UPDATE) _FTP_Close($hFTP) Return 1
    EndSwitch WEnd
    EndFunc ;==>_Update]

    [/autoit]


    Vielen Dank im voraus für eure Antwort bzw. Hilfe.[/font]

    Einmal editiert, zuletzt von i2c (31. März 2014 um 19:40) aus folgendem Grund: Spoiler und AutoIt BBCodes korigiert. Codeformatierung bitte selbst :)

  • Du rufst die Update Funktion ohne jegliche Parameter auf obwohl du die in deiner Update Funktion deklariert hast.
    Außerdem rufst du die Update Funktion auf bevor du die einzelnen Variablen wie Server, User, PW usw deklariert hast
    Verstehe auch ned warum du die FTP und Array Funktionen einzeln auflistest. include doch die jeweilige Datei.

    hab jetzt den Code einfach nen bischen aufgeräumt und nicht getestet ob da jetzt irgendwas funktioniert. So gibts nur schonmal keine Fehlermeldungen mehr

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <FTPEx.au3>
    #include <GUIConstantsEx.au3>

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

    $sServerName = "ftp.lima-city.de"
    $sUserName = "Peter"
    $sPassword = "Password"
    $iCurrentVersion = "1.4"
    $sFileName = "ABC v"
    $sDir = "/Downloads"
    $fStartAfter = True
    $sDatatype = ".exe"

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

    _Update($sServerName, $sUserName, $sPassword, $iCurrentVersion, $sFileName, $sDir, $fStartAfter, $sDatatype)

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

    Func _Update($sServerName, $sUserName, $sPassword, $iCurrentVersion, $sFileName, $sDir, $fStartAfter, $sDatatype = ".exe")

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

    Local $aFileListNEW[1], $iFileNameLen = StringLen($sFileName), $hFTP_Open, $hFTP, $aFileListOLD[1], $i, $hGUI_UPDATE, $idBtnJA_UPDATE, $idBtnNEIN_UPDATE, $iNewestVersion

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

    $hFTP_Open = _FTP_Open("UPDATE")
    If @error Then Return SetError(1, 1)
    $hFTP = _FTP_Connect($hFTP_Open, $sServerName, $sUserName, $sPassword)

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

    If @error Then Return SetError(1, 2)

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

    If $sDir <> "" Then _FTP_DirSetCurrent($hFTP, $sDir)

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

    If @error Then Return SetError(1, 3)

    $aFileListOLD = _Ftp_ListToArray($hFTP)

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

    For $i = 0 To $aFileListOLD[0]
    If StringLeft($aFileListOLD[$i], $iFileNameLen) = $sFileName Then _ArrayAdd($aFileListNEW, StringTrimRight(StringTrimLeft($aFileListOLD[$i], $iFileNameLen), 4))
    Next

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

    $iNewestVersion = _ArrayMax($aFileListNEW)

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

    If @error Then Return SetError(1, 4)

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

    If $iNewestVersion <= $iCurrentVersion Then Return 1

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

    $hGUI_UPDATE = GUICreate("Neue Version verfügbar!", 300, 200)
    GUISetBkColor(0xF7F6F9, $hGUI_UPDATE)

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

    $idLbl = GUICtrlCreateLabel("Es ist eine neue Version ihrer Software verfügbar!" & @CRLF & @CRLF & "Möchten Sie sie jetzt aktualisieren?", 5, 5, 300, 300)
    GUICtrlSetFont($idLbl, 12)
    $idBtnJA_UPDATE = GUICtrlCreateButton("Ja", 50, 160, 50, 20)
    $idBtnNEIN_UPDATE = GUICtrlCreateButton("Nein", 170, 160, 50, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $idBtnJA_UPDATE
    _FTP_FileGet($hFTP, $sFileName & $iNewestVersion & $sDatatype, @ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype)
    If @error Then Return SetError(1, 5)
    _FTP_Close($hFTP)
    If $fStartAfter Then ShellExecute(@ScriptDir & "" & $sFileName & $iNewestVersion & $sDatatype)
    MsgBox(0,"",$iNewestVersion)
    Return $iNewestVersion

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

    Case $idBtnNEIN_UPDATE
    GUIDelete($hGUI_UPDATE)
    _FTP_Close($hFTP)
    MsgBox(0,"","2")
    Return 1

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

    Case $GUI_EVENT_CLOSE
    GUIDelete($hGUI_UPDATE)
    _FTP_Close($hFTP)
    MsgBox(0,"","2")
    Return 1
    EndSwitch
    WEnd
    EndFunc ;==>_Update

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


    PS:
    Das nächste mal vor dem posten mal auf die Vorschau Funktion gucken. Das mit dem AutoIt Code hat nicht so ganz geklappt ;)

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (31. März 2014 um 19:32)

  • Kannst dich bei mir via mail melden.
    Könnte dir was bauen, dass er die neue Version runterlädt und direkt entpackt (sofern Sie gepackt ist)
    Mail:x

    Das ganze ohne FTP befehle

    Einmal editiert, zuletzt von Awesome (15. Dezember 2023 um 15:56)