Register for your free account! | Forgot your password?

You last visited: Today at 20:03

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[AutoIt] Self-Update

Discussion on [AutoIt] Self-Update within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Smile [AutoIt] Self-Update

Hallo,

mit diesem kleinen Tutorial will ich euch zeigen, wie euer Programm nach jedem Start prüft ob es eine neue Version gibt. Falls ja, wird man zur Downloadseite gebracht.



Dafür braucht ihr erstmal eine eigene Webseite. Erstellt einfach eine kostenlose von z.B. oder einem anderen Anbieter. Nachdem ihr das getan habt, erstellt ihr ein Textfeld/Titel, wo ihr die Version eures Programmes reinschreibt:












Als nächstes erstellt ihr ein weiteres Textfeld, wo der Downloadlink drinstehen soll:











Ich habe meinen mit DownloadBegin und DownloadEnd gekennzeichnet, damit ich ihn später leichter finden kann.


Kommen wir jetzt zum Code. Wir werden bei jedem Start den Seitenquelltext eurer Webseite auslesen und prüfen, welche Version am aktuellsten ist. Den Quelltext einer Seite lesen wir so aus:




Code:
#include <INet.au3>

$Quelltext = _INetGetSource('http://www.moneypulation.jimdo.com')




Da kommt natürlich eure Webseite rein. Gucken wir uns den Quelltext mal im Browser an.















Mit F3 können wir (zumindest in Chrome) nun nach unser Version suchen. In meinem Fall war es 1.9 . Wenn ihr die Stelle gefunden habt, wo eure Version zu sehen ist...












dann lassen wir in unserem Programm mit _StringBetween danach suchen. _StringBetween erwartet einen großen String (unser Quelltext) und den String vor bzw. nach unserem gesuchten String. Also ein Stück Code direkt vor und nach der Version. Dieser Code darf sich aber niemals ändern, z.B. wenn ihr den <b> Tag, was für fette schrift steht, mitkopiert und später eure Version wieder normal macht, dann wird euer String nicht gefunden. Also nehmt nur sowas wie <h1 class="" id="blablabla">













Am Anfang eures Codes solltet ihr dann das haben:



Code:
#include <INet.au3>
#include <String.au3>

$Quelltext = _INetGetSource('http://www.moneypulation.jimdo.com')
$StrVersion = _StringBetween($Quelltext, 'class="n j-header"><h1 class="" id="cc-m-header-10499976623">',"</h1><script")




Die 2 UDF's String.au3 und INet.au3 müsst ihr dafür includen. Zu _StringBetween muss man noch sagen, dass die Funktion einen Array zurückgibt, da unser String ja mehrmals im Text vorkommen könnte. $StrVersion[0] ist das erstgefundene Element, daher benutzen wir auch nur dies. Als Test können wir die $StrVersion[0] ja mal mit einer MsgBox ausgeben:



Code:
Msgbox(0,"",$StrVersion[0])












Und siehe da, unsere Version wird gefunden. Nun können wir auf unserer Webseite die 1.9 zu einer 2.0 ändern und unser Programm wird es erkennen. Jetzt fehlt nichts, als ein paar If-Abfragen, ob die Version aktuell ist und der Benutzer auf die Downloadseite möchte. Die Downloadseite findet euer Programm ebenfalls mit _StringBetween. Nachdem ihr wisst, wie ihr es bei eurer Version macht, solltet ihr auch in der Lage sein, das mit eurer Downloadseite hinzukriegen.



Code:
#include <INet.au3>
#include <String.au3>

$Quelltext = _INetGetSource('http://www.moneypulation.jimdo.com')
$StrVersion = _StringBetween($Quelltext, 'class="n j-header"><h1 class="" id="cc-m-header-10499976623">',"</h1><script")
Msgbox(0,"",$StrVersion[0])
IF not @error Then
   If Not ($StrVersion[0] = "1.8") Then
	  $MsgBox = MsgBox(4,"New Version","A new Version is available. Would you like to visit the download page?")
   EndIf
EndIf





If not @error prüft ob überhaupt ein String gefunden wird und mit If Not ($StrVersion[0] = "1.8") wird daraufhin geprüft ob dieser gefundene String 1.8, also die Version des aktuellen Programmes ist. Ich hab die Flag 4 der MsgBox benutzt, weil man dann in der MsgBox entweder Ja oder Nein anklicken kann. Falls der "Ja" Button angeklickt wird, wird der Wert 6 zurückgegeben. Damit findet man heraus ob der User nun die aktuelle Version möchte. Im Ganzen sieht das dann so aus:




Code:
#include <INet.au3>
#include <String.au3>

$Quelltext = _INetGetSource('http://www.moneypulation.jimdo.com')
$StrVersion = _StringBetween($Quelltext, 'class="n j-header"><h1 class="" id="cc-m-header-10499976623">',"</h1><script")
Msgbox(0,"",$StrVersion[0])
IF not @error Then
   If Not ($StrVersion[0] = "1.8") Then
	  $MsgBox = MsgBox(4,"New Version","A new Version is available. Would you like to visit the download page?")
	  If $MsgBox = 6 Then
		 $StrDownload = _StringBetween($Quelltext, '<strong>DownloadBegin</strong>','<b>DownloadEnd</b>')
		 IF not @error Then
			ShellExecute($StrBetween2[0])
			Exit
		 Else
			MsgBox(0,"Error","Couldn't find download page")
			EndIf
		 EndIf
	  EndIf
   EndIf





ShellExecute öffnet die Downloadseite, die wir ja ebenfalls auf unserer Webseite haben. Und damit hätten wir es geschafft:













Falls der User ja anklickt, wird die Downloadseite aufgerufen und das Programm beendet. Wenn nicht, dann passiert nichts und euer Programm sollte daraufhin starten. Solltet ihr nun eine neue Version rausbringen, stellt ihr den Downloadlink in eure Webseite und ändert die Version. Alle User werden dann auf die Version hingewiesen, wenn sie euer Programm starten.

Ich hoffe, dass ich euch damit weiterhelfen konnte und ihr nun in der Lage seid eure Programme "selbst updaten" zu lassen.
Moneypulation is offline  
Thanks
1 User
Old 10/12/2014, 02:40   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Wieso Inet.au3 includen wenn du statt _INetGetSource auch einfach
Code:
BinaryToString(InetRead("http://abc.de")
nehmen könntest?

Warum die ganze String.au3 includen wenn du auch einfach reguläre Ausdrücke verwenden könntest?
alpines is offline  
Old 10/12/2014, 02:43   #3


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by alpines View Post
Wieso Inet.au3 includen wenn du statt _INetGetSource auch einfach
Code:
BinaryToString(InetRead("http://abc.de")
nehmen könntest?

Warum die ganze String.au3 includen wenn du auch einfach reguläre Ausdrücke verwenden könntest?
Ich weiß es gibt viele Wege, die auch besser sind aber mit dem Tutorial hat man immerhin die Grundbasis wie man ein Programm selbst updaten lässt. Man könnte natürlich auch statt die Downloadseite aufzurufen, das Programm direkt downloaden und das alte selbst löschen lassen. Ich habs halt so gemacht
Moneypulation is offline  
Old 10/12/2014, 12:11   #4
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by alpines View Post
....
und warum überhaupt so viel arbeit machen und nicht einfach eine text datei auf ein free webspace laden? (dropbox empfiehlt sich)

StringBetween ist regex....

Mit InetGet downloaden und den user nur fragen ob ers möchte ist auch besser finde ich
YatoDev is offline  
Old 10/12/2014, 13:55   #5
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Quote:
Originally Posted by »FlutterShy™ View Post
StringBetween ist regex....
No **** sherlock, aber eine ganze UDF zu includen obwohl man ein einfaches Pattern hätte nutzen können...
alpines is offline  
Old 10/12/2014, 21:21   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,480
Received Thanks: 3,319
Leute, bitte einigermaßen beim Thema bleiben.
snow is offline  
Old 10/12/2014, 21:22   #7
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Solange jeder unterschiedliche Variablennamen verwendet sollte das doch passen.

Aber zurück zum Thema: Eine Datei abzulegen die gezogen wird wäre wohl die bessere Alternative, da du einerseits weniger Traffic hast und kein RegEx (_StringBetween) brauchst.

Wenn du auf deinem Webspace z.B. die Datei "version.txt" mit dem Inhalt 1.0.0 hast, kannst du einfach
Code:
MsgBox(64, "Version", "Aktuelle Version: " & BinaryToString(InetRead("http://webspace.de/version.txt")))
verwenden und das ist um einiges schneller.
alpines is offline  
Old 02/16/2015, 11:33   #8
 
シャイキング's Avatar
 
elite*gold: 0
Join Date: Jan 2015
Posts: 146
Received Thanks: 81
THX THX THX !
シャイキング is offline  
Old 04/07/2015, 21:38   #9
 
elite*gold: 0
Join Date: Apr 2015
Posts: 375
Received Thanks: 2,520
Not work? Help .x.
Xonivion is offline  
Old 04/08/2015, 08:45   #10


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by Xonivion View Post
Not work? Help .x.
Maybe you explain your problem? I can't read minds
Moneypulation is offline  
Old 10/23/2015, 15:53   #11
 
elite*gold: 73
Join Date: May 2015
Posts: 211
Received Thanks: 99
Nice Tutorial Bro
iLeo- is offline  
Old 10/24/2015, 15:45   #12
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Wieso nicht gleich eigene Tags benutzen, welche das viel überschaubarer machen?

Code:
<Version:accessable>1.1</version> //Version die noch unterstützt wird
<Version:accessable>1.2</version> //Version die noch unterstützt wird

<Version:live>2.0</version> //Aktuelle Version

<Download:version_1_1>...</download>
<Download:version_1_2>...</download>
<Download:version_2_0>...</download>
Nicht gelistete bzw. unterstützte Versionen können zu einem Update gezwungen werden. Außerdem ist die Lösung mittels "generierter" Homepage suboptimal, da doch recht viel content zunächst einmal runtergeladen und dann geparsed werden muss. Wieso nicht gleich eine leere .txt mit den entsprechenden Tags auf einem FTP hosten?
Logtetsch is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Problem with Autoit Inventory update
12/15/2012 - SRO Coding Corner - 6 Replies
Hello I want use 1th 2th 3th 4th 5th inventory slots. But 4th and 5th not updating.. Please help me: InjectPacket($alchemy_packet, "0203030D0E0F1011") If $opcode = $invupdate_packet then
Grand fantasia autoit BOT für DE update
08/11/2012 - General Gaming Discussion - 3 Replies
hier der autoit bot von spoonlove mit aktuellen pointers für die deutsche version falls nache dem passwort gefragt wird hier ist es samy2020 LinkSave.in hier das resultat von virus total Antivirus Version Last Update Result AhnLab-V3 2010.08.31.01 2010.08.31 - AntiVir 8.2.4.46 2010.08.31 -
[AutoIt] Update Funktion für eure Bots
07/01/2011 - Coding Tutorials - 3 Replies
Hallo. Ich möchte euch zeigen, wie ihr eine simple Update Funktion für eure Bots erstellt. Seid nicht zu hart zu mir, weil das mein erstes Tutorial ist ;) Als bevor wir mit den Code anfangen, werde ich euch das Prinzip erklären: - Es gibt ein kleines Programm, welches das Update durchführt. Dieses könnt ihr einfach via Run() mit euren Bot mitstarten lassen. Dies wird benötigt, da sich nicht so leicht eine laufendes Programm überschreiben lässt.
[S]uche Update von Autoit [B]iete E*G
06/27/2011 - elite*gold Trading - 0 Replies
Hallo Community! Ich Suche Update & Biete (x) E*G Was Suche ich? Der Jemand mein Bot benutzt, der sich neue Update haben möchte, daher will er sich neu Dowloaden, weil er vllt mir nicht PN anschicken möchte.. http://s7.directupload.net/images/110601/7kxtyjou .png
Anti Autoit Bypass v3.0 ( All Versions + Auto update )
03/08/2010 - Last Chaos - 96 Replies
Well here is the Final Version of the bypass. This one, should work fine for all Versions at least until the next big update or until they get new detections methods. RIP Autoit Detection :p ps: The first Messagebox got removed, it was patching fine, but i didnt



All times are GMT +2. The time now is 20:03.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.