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:
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
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]
Vielen Dank im voraus für eure Antwort bzw. Hilfe.[/font]