Online-Update Funktion...

Anfängerfragen zum Programmieren mit PureBasic.
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Online-Update Funktion...

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Onlone-Update Fuktion...

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Onlone-Update Fuktion...

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Onlone-Update Fuktion...

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Onlone-Update Fuktion...

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Onlone-Update Fuktion...

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Onlone-Update Fuktion...

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Onlone-Update Fuktion...

Beitrag 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
(\/) (°,,,°) (\/)
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Onlone-Update Fuktion...

Beitrag von mk-soft »

Ist mir auch schon aufgefallen.

Vieleicht ist seine Tastatur kaputt... :mrgreen: <)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: Online-Update Funktion...

Beitrag 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
Antworten