[TUT] Einfachen Updater erstellen!

07/11/2013 18:00 Tiimä#1
Hey,
das ist mein erstes TUT, also seid nicht so streng mit mir!

1. Voraussetzungen
- Webspace
- Zip.au3

2. GUI
So nun brauchen wir eine Gui für die Abfrage, ob geupdated werden soll, und eine Gui, um den Changelog anzuzeigen.
Hier mal meine:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

3. Dateien erstellen
Als erstes müsst ihr eine Datei erstellen, die die Versionnummer enthält. Bei mir: version.txt
Beispiel:
HTML Code:
2.5
Danach noch eine HTML Datei, die den Changelog enthält. Bei mir: log.html
Beispiel:
HTML Code:
<p>added: GUI</p>
<p>*Bug fixes</p>
4. AutoIt :D
Als erstes müssen wir die Versionsnummer auslesen und den Source der HTML Datei verarbeiten. Dafür ersetzen wir <p> und </p>!
Code:
$version = _INetGetSource("http://tim-lange.org/tut/version.txt") ;Version
$read = _INetGetSource("http://tim-lange.org/tut/log.html") ;Source einlesen
$umbruch = StringReplace($read, "</p>", @CRLF) ;</p> durch Zeilenumbruch ersetzen
$logedit = StringReplace($umbruch, "<p>", "") ;<p> rauslöschen
Nun will der User natürlich auch wissen, auf welche Version geupdated werden soll.
Code:
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Updater", 250, 71, -1, -1)
$updatelabel = GUICtrlCreateLabel("Update to " & $version & "?", 64, 8, 124, 28) ;Nur diese Zeile ist wichtig!
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$y = GUICtrlCreateButton("Yes", 8, 40, 75, 25)
$n = GUICtrlCreateButton("No", 88, 40, 75, 25)
$log = GUICtrlCreateButton("Changelog", 168, 40, 75, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Wenn das geschafft ist setzen wir dem Editfeld Eigentschaften, dass man Scrollen kann, aber den Inhalt nicht editieren kann.
Code:
#region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Changelog", 261, 174, -1, -1)
$Edit1 = GUICtrlCreateEdit($logedit, 8, 8, 241, 129, $ES_READONLY + $WS_VSCROLL + $WS_HSCROLL) ;Nur die Zeile ist wichtig!
$close = GUICtrlCreateButton("Close", 8, 144, 243, 25)
#endregion ### END Koda GUI section ###
Zum Schluss müssen wir noch unseren Buttons eine Funktion geben.
Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $log ;Wenn unser Changelog Button gedrückt wird, soll die 2. GUI mit dem Changelog angezeigt werden. Dafür setzen wir die Form2 auf SHOW!
			GUISetState(@SW_SHOW, $Form2)
		Case $close;Wenn die GUI wieder geschlossen werden soll, ohne das sich das Programm schließt, müssen wird die Form2 einfach wieder auf HIDE setzen!
			GUISetState(@SW_HIDE, $Form2)
		Case $n ;Wenn der User nicht updaten will kann er auf nein drücken und das Programm schließt sich einfach. Ist aber kein Muss!
			Exit
		Case $y ;Wenn er nun das Update bestätigt, wird per InetGet die neuste Version heruntergeladen, Unzipped und gesagt, dass alles Erfolgreich war.
			InetGet("http://tim-lange.org/tut/prefix-" & $version & ".zip", "C:\update.zip") ;Prefix kann nach belieben geändert werden!
			_Zip_UnzipAll("C:\update.zip", @ScriptDir, 1)
			MsgBox(64, "Updater", "Succesfuly updated to " & $version & "!")
			Exit
	EndSwitch
WEnd
Das wars dein eigentlich schon :) Der Updater ist fertig! Ich hoffe es ist gut verständlich.
07/11/2013 18:09 YatoDev#2
lad bitte die zip.au3 hoch :)
07/11/2013 18:14 Tiimä#3
Quote:
Originally Posted by »FlutterShy™ View Post
lad bitte die zip.au3 hoch :)
Habs gemacht
07/11/2013 18:34 YatoDev#4
bist du dir sicher das du das richtige hochgeladen hast ?
07/11/2013 18:42 Achat#5
Quote:
Originally Posted by Tiimä View Post
1. Voraussetzungen
- Webspace
- INet.au3
- Zip.au3
- GUI Includes
- Koda
[/code]
[Only registered and activated users can see links. Click Here To Register...]
1. Voraussetzungen
- Webspace
- INet.au3
- Zip.au3
- GUI Includes
- Koda


MfG
07/11/2013 19:46 Asuramaru#6
Anstadt ein extra Include zu nutzen könntest du auch einfach InetRead benutzen und das Ergebniss mit BinaryToString in einen String umwandeln.

Code:
$version = BinaryToString(InetRead("http://tim-lange.org/tut/version.txt",2))
Wenn du <p></p> sowieso löscht, wieso benutzt du dieses dann eigentlich?
Man könnte diese einfach weglassen und somit das StringReplace() sparen.

Du solltest darauf achten auf mögliche Fehler einzugehen und den Rückgabewert der Funktionen überprüfen.
Denn du weißt nicht ob der Download und somit das updaten erfolgreich war.

Je nach geschmack könnte man die zip.au3 auch raushauen und die Files einzelnt runterladen, wenn man allerdings lieber mit einem Zip-Packet arbeitet ist das auch okay.


mfg.
07/11/2013 19:55 K1ramoX#7
paar ideen:
  • würde lieber JSON code nehmen statt xml
  • error abfragen implementieren, dein script macht einfach weiter. kann ja sein dass dein webspace mal down ist und dass wäre fürs script nicht so gut
  • es ist definitiv sauberer, wenn du statt codeteile wie Case $GUI_EVENT_CLOSE lieber Case -3 nimmst. so sparst du dir includes und die datei wird kleiner
07/11/2013 20:04 YatoDev#8
ich möchte trotzdem noch die zip.au3 , oder bin ich wirklich zu dumm die zu finden ? (nein im anhang ist die nicht da ist die win api constants und word.au3)
07/11/2013 20:31 K1ramoX#9
Quote:
Originally Posted by »FlutterShy™ View Post
ich möchte trotzdem noch die zip.au3 , oder bin ich wirklich zu dumm die zu finden ? (nein im anhang ist die nicht da ist die win api constants und word.au3)
[Only registered and activated users can see links. Click Here To Register...]

google hätte auch geholfen ;o
07/11/2013 20:54 Achat#10
Quote:
Originally Posted by »FlutterShy™ View Post
ich möchte trotzdem noch die zip.au3 , oder bin ich wirklich zu dumm die zu finden ? (nein im anhang ist die nicht da ist die win api constants und word.au3)
[Only registered and activated users can see links. Click Here To Register...]

MfG
07/11/2013 21:17 Tiimä#11
Quote:
Originally Posted by »FlutterShy™ View Post
ich möchte trotzdem noch die zip.au3 , oder bin ich wirklich zu dumm die zu finden ? (nein im anhang ist die nicht da ist die win api constants und word.au3)
LOL! Ich hasse Windows

Quote:
Originally Posted by *_Kenshi_* View Post
Anstadt ein extra Include zu nutzen könntest du auch einfach InetRead benutzen und das Ergebniss mit BinaryToString in einen String umwandeln.

Code:
$version = BinaryToString(InetRead("http://tim-lange.org/tut/version.txt",2))
Wenn du <p></p> sowieso löscht, wieso benutzt du dieses dann eigentlich?
Man könnte diese einfach weglassen und somit das StringReplace() sparen.

Du solltest darauf achten auf mögliche Fehler einzugehen und den Rückgabewert der Funktionen überprüfen.
Denn du weißt nicht ob der Download und somit das updaten erfolgreich war.

Je nach geschmack könnte man die zip.au3 auch raushauen und die Files einzelnt runterladen, wenn man allerdings lieber mit einem Zip-Packet arbeitet ist das auch okay.


mfg.
Ich hatte sonst immer das Problem, dass die Umbrüche nicht übernommen wurden!
07/11/2013 22:30 Achat#12
Quote:
Originally Posted by Tiimä View Post
LOL! Ich hasse Windows



Ich hatte sonst immer das Problem, dass die Umbrüche nicht übernommen wurden!
Code?

Es gibt übrigens @LF, @CR und @CRLF
bzw \n \r \r\n

In einem Editor (z.B. Notepad++) kannst du dir auch nicht-druckbare Zeichen anzeigen.

MfG
07/11/2013 22:46 YatoDev#13
Quote:
Originally Posted by K1ramoX View Post
[Only registered and activated users can see links. Click Here To Register...]

google hätte auch geholfen ;o
Quote:
Originally Posted by Achat View Post
Code?

Es gibt übrigens @LF, @CR und @CRLF
bzw \n \r \r\n

In einem Editor (z.B. Notepad++) kannst du dir auch nicht-druckbare Zeichen anzeigen.

MfG
Ich wuerde sagen das es an der codierung des textes liegt .

Zu der zip.au3
Nein ich haette die mir nicht aus google suchen koennen ! ich hab vor einigen wochen hier schonmal nach einer gefragt welche aber nicht richtig oder garnicht funktioniert haben
07/11/2013 23:35 Tiimä#14
Die richtige ist nun oben!