Seite 1 von 2

Online-Update Funktion...

Verfasst: 24.09.2013 18:27
von Rene-RNI
Hallo bisher habe ich meine Programme mit AutoIt geschrieben, ich habe dort eine Updatefuktion benutzt die über FTP ging.

giebt es so eine Fuktion auch bei PureBasic?

Hier mal der Code von AutoIT, vieleicht hat ja jemand eine Idee wie man das in Purebasic umsetzen könnte.

dieser Code stand im Programm selbst:

Code: Alles auswählen

#cs

; <-- Beginn Update Block
#include <updateftp.au3>

$b4it_ftp_Server = "blog4it.bplaced.net";<-- Ftp Server eintragen
$b4it_ftp_User = "blog4it_autoit"		;<-- Ftp Server Benutzer eintragen
$b4it_ftp_Password = "autoit"			;<-- Ftp Server Passwort eintragen
$b4it_ftp_Path = "/update"				;<-- Ftp Server Pfad zu dem Ortner mit den Updates eintragen
$b4it_local_Version = "1.0.0"			;<-- Die lokale Version des Skriptes eintragen

; <-- NICHT ÄNDERN
$b4it_local_ScriptName = @ScriptName
$b4it_local_ScriptDir = @ScriptDir & '\'
; -->

b4it_checkforupdate()
; --> Ende Udate Block


#ce
und dieser ist die Fuktion:

Code: Alles auswählen

#include <FTPEx.au3>
#include <array.au3>

Global $b4it_ftp_Server = ""
Global $b4it_ftp_User = ""
Global $b4it_ftp_Password = ""
Global $b4it_ftp_Path = ""
Global $b4it_ftp_Open = ""
Global $b4it_ftp_Conn = ""
Global $b4it_ftp_Version = ""

Global $b4it_local_Version = ""
Global $b4it_local_ScriptName = ""
Global $b4it_local_ScriptDir = ""
Global $b4it_local_UpdateFileName = ""


; Hauptfunktion
Func b4it_checkforupdate()
	b4it_deloldupdatefile()
	If Not b4it_ftpInit() Then Return
	If Not b4it_checkFiles() Then Return
	b4it_update()
EndFunc


; Prüfen ob noch eine alte Update lokal vorhanden
; ist und löschen
Func b4it_deloldupdatefile()
	$b4it_local_UpdateFileName = StringFormat("%s_update%s",$b4it_local_ScriptDir,$b4it_local_ScriptName)
	If FileExists($b4it_local_UpdateFileName) Then FileDelete($b4it_local_UpdateFileName)
EndFunc

; Verbindung zum Server aufbauen und das Verzeichnis
; auf den Ordner setzen, wo die Updates liegen
Func b4it_ftpInit()
	$b4it_ftp_Open = _FTP_Open('MyFTP Control')
	$b4it_ftp_Conn = _FTP_Connect($b4it_ftp_Open, $b4it_ftp_Server, $b4it_ftp_User, $b4it_ftp_Password)
	If @error Then Return 99
	_FTP_DirSetCurrent($b4it_ftp_Conn,$b4it_ftp_Path)
	If @error Then Return False
	Return True
EndFunc

; Dateiliste holen und die Version vom Server speichern
Func b4it_checkFiles()
	$filelist = _Ftp_ListToArray($b4it_ftp_Conn,2)
	If Not IsArray($filelist) Then Return False
	_ArraySort($filelist,1)
	$strlen = StringLen($b4it_local_ScriptName)
	For $int = 0 To UBound($filelist) -1
		If StringLeft($filelist[$int],$strlen) = $b4it_local_ScriptName Then
			$strsplit = StringSplit($filelist[$int],"_")
			$b4it_ftp_Version = $strsplit[2]
			If $b4it_ftp_Version = $b4it_local_Version Then Return False
			Return True
		EndIf
	Next
	Return False
EndFunc

; Abfrage und ggf. Download der neuen Datei
Func b4it_update()
	$str = StringFormat("New Update found - Version: %s" & @LF & "Do you want a update?",$b4it_ftp_Version)
	$res = MsgBox(32,"Update - " & $b4it_ftp_Version,$str)
	If $res = 1 Then
		$remotFile = $b4it_local_ScriptName & "_" & $b4it_ftp_Version
		$localFile = $b4it_local_ScriptDir & "_" & $b4it_local_ScriptName
		_FTP_FileGet($b4it_ftp_Conn,$remotFile,$localFile)
		If @error Then Return False
		FileMove($b4it_local_ScriptDir & $b4it_local_ScriptName, $b4it_local_ScriptDir & '_update' & $b4it_local_ScriptName)
		FileMove($localFile,$b4it_local_ScriptDir & $b4it_local_ScriptName)
		Run($b4it_local_ScriptDir & $b4it_local_ScriptName)
		Exit
	EndIf
EndFunc
Danke schon mal für eure hilfe

Gruß Rene

Edit by NicTheQuick: Titel korrigiert

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 18:35
von RSBasic
Ja, siehe PB-Hilfe unter "FTP". Wenn du eine Update-Datei herunterladen möchtest, dann siehe "HTTP".
Dort findest du alle Funktionen, die du brauchst.

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 18:44
von ts-soft
Es ist aber ein grosses Risiko, Update-Funktion per FTP zu nutzen. UserName und Passwort werden als Klartext
gesendet, egal ob Du die in Deinem Programm verschlüsselt hast o. ä., also kann jeder diese ermitteln und
auf dem Server machen, was er möchte, z.B. auch illegalen Content hochladen, wofür Du dann in die Kiste
wanderst (extrem Beispiel).

Schau Dir lieber mal ReceiveHTTPFile() in der Hilfe an, damit bist Du auf der sichereren Seite.

Gruß
Thomas

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 19:10
von Rene-RNI
also folgendes habe ich schon soweit im meinem Programm drinn:

1. eine Variable VERSION
2. in der im Programm verwendeten MySQL Datenbank die aktuelle Programmversion

Nun meine Vorgehensweise:

1. Lokale Version mit Onlineversion vergleichen
2. wenn gelich dann nichts unternehmen
3. wenn online größer als lokal Update starten
4. Lokale Programm.exe in OldProgramm.exe umbenennen
5. Download Programm.exe_Version nach Programm.exe
6. Neue Programm.exe starten und alten Process killen.

Ist das so richtig

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 19:20
von ts-soft
Einfach text oder xml Datei auf den Webspace, mit der Versionsnummer und evtl. weiteren informationen, die man dem
Anwender vorab anzeigen kann.

Dann dem Anwender anbieten, dieses Update zu downloaden (nicht automatisch machen). Downloaden per HTTP
und niemals per FTP!!!

Jetzt kommt es drauf an, gehört zu Deinem Programm ein richtiger Installer, der auch Upgraden kann, dann diesen
ausführen, ansonsten den Anwender auffordern, die Dateien auszutauschen.
Ansonsten könnte es Probleme mit den fehlenden Rechten geben, noch gestartete Versionen Deines Programmes usw.

Ohne professionelles Installations-Programm, wie z.B. Inno-Setup oder NIS (Nullsoft Installer) solltest Du keine Dateien
automatisch austauschen, das wird auf vielen Rechnern in die Hose gehen und Du verärgerst den Anwender mehr, als
ihm zu die Arbeit zu erleichtern.

Gruß
Thomas

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 19:44
von Rene-RNI
Das Starten eines externen Programms wollte ich vermeiden, es sollte alles automatisch gehen, Mit einer Message "Update Found"

Das Programm wird nur von einem eingeschränkten Benutzerkreig verwendet, und die wissen auch dass es Updates gibt.

deshalb wollte ich es alles im Programm selber unterbringen.

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 20:24
von ts-soft
Ist Dir vielleicht nicht bekannt, aber der Server von bplaced.net war bereits mehrmals befallen, von dem möchte ich
keine autom. Updates installieren :mrgreen:

Ich glaube nicht, das Du die gesamte Problematik eines autom. Updates überblickst und rate Dir deshalb davon ab,
mehr als einen Download zu machen und den Rest den Anwendern zu überlassen.

Im Endeffekt entscheidest Du das natürlich selbst.

Gruß
Thomas

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 20:40
von KeyKon
Da bin ich ganz ts-softs Meinung!
Es gibt für mich nichts schlimmeres als Programme (von "Hobbyentwicklern") die solch eine Funktion haben die dann um Admin-Rechte schreit, obwohl das Programm selbst keine Admin-Rechte zum Ausführen braucht.

Ich habe auch zwei kleine Programme die hauptsächlich in meinem Bekanntenkreis genutzt werden, und da hat sich noch keiner Beschwert, dass diese "nur" auf eine neue Version hinweisen, mit der Möglichkeit den Downloadlink an den Browser zu übergeben (der dann ja direkt das Downloaden übernimmt).

PS: Bin ich der einzige der sich an den überdurchschnittlich vielen Tippfehlern im Titel stört *g*?

LG KeyKon

Re: Onlone-Update Fuktion...

Verfasst: 24.09.2013 20:43
von mk-soft
Ist mir auch schon aufgefallen.

Vieleicht ist seine Tastatur kaputt... :mrgreen: <)

Re: Online-Update Funktion...

Verfasst: 25.09.2013 12:26
von Rene-RNI
Sorry für die Tippfehler, passiert immer wenn ich zu schnell schreibe...

Werde das ganze mal mit meinen Leuten besprechen.

Gruß Rene