Guest User

Portable Chrome Updater

a guest
Aug 21st, 2010
466
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #NoTrayIcon
  2. #Region
  3. #AutoIt3Wrapper_icon=system-software-update.ico
  4. #AutoIt3Wrapper_outfile=Updater.exe
  5. #AutoIt3Wrapper_UseUpx=n
  6. #AutoIt3Wrapper_UseX64=n
  7. #AutoIt3Wrapper_Res_Comment=Updater for portable Google Chrome
  8. #AutoIt3Wrapper_Res_Description=Updater for portable Google Chrome
  9. #AutoIt3Wrapper_Res_Fileversion=0.5.0.0
  10. #AutoIt3Wrapper_Res_LegalCopyright=http://stadt-bremerhaven.de
  11. #AutoIt3Wrapper_Res_Field=UsbDump by|http://stadt-bremerhaven.de
  12. #AutoIt3Wrapper_Res_Field=Developed by|Bene
  13. #AutoIt3Wrapper_Res_Field=Productname|Chrome Updater
  14. #AutoIt3Wrapper_Res_Field=Productversion|0.5.0
  15. #AutoIt3Wrapper_Res_Field=Made by|Bene
  16. #EndRegion
  17.  
  18.  
  19. Opt("MustDeclareVars", 0)
  20.  
  21. #include <GUIConstantsEx.au3>
  22. #include <StaticConstants.au3>
  23. #include <WindowsConstants.au3>
  24. #include <ProgressConstants.au3>
  25. #include <Inet.au3>
  26. #include <Array.au3>
  27. #include <WinHTTP.au3>
  28.  
  29.  
  30. ; updater nur einmal starten
  31. #include <misc.au3>
  32. If _Singleton("Updater.exe", 0) = 0 Then
  33.     ProcessClose("Updater.exe")
  34. EndIf
  35.  
  36. ; schauen ob chrome.exe prozess existiert
  37. If ProcessExists( "chrome.exe" ) Then
  38.     ; prozess existiert, abfrage ob beendet werden soll
  39.     If @OSLang = 0407 Then
  40.         $ask = MsgBox(4,"Chrome Updater", "Laufender Chrome muss beendet werden bevor das Update gestartet werden kann. Chrome jetzt beenden?")
  41.     Else
  42.         $ask = MsgBox(4,"Chrome Updater", "Existing chrome must be quit before update can start. Quit chrome now?")
  43.     EndIf
  44.     If $ask = 7 Then
  45.         ; mit nein geantwortet, also updater beenden
  46.         If @OSLang = 0407 Then
  47.             MsgBox(0,"Chrome Updater", "Chrome Updater beenden.")
  48.         Else
  49.             MsgBox(0,"Chrome Updater", "Quit chrome updater.")
  50.         EndIf
  51.         Exit
  52.     Else
  53.         ; mit ja geantwortet, also chrome.exe beenden und warten bis beendet wurde, danach erst weiter
  54.         ProcessClose( "chrome.exe" )
  55.     EndIf
  56. EndIf
  57.  
  58. ; GUI für die Auswahl ob Beta oder Release Channel
  59. GUICreate( "Chrome Updater", 420, 95 )
  60. Opt( "GUICoordMode",2 )
  61. $canary = GUICtrlCreateButton ( "Canary Channel",  10, 30, 100 )
  62. $dev = GUICtrlCreateButton ( "Dev Channel",  0, -1 )
  63. $beta = GUICtrlCreateButton ( "Beta Channel",  0, -1 )
  64. $release = GUICtrlCreateButton ( "Release Channel",  0, -1 )
  65. $vcheck = GUICtrlCreateCheckbox( "Versionskontrolle ignorieren", -400, 10, 220, 20 )
  66. GUISetState()
  67.  
  68. ; GUI laufen lassen bis geschlossen wird
  69. While 1
  70.     $msg = GUIGetMsg()
  71.     Select
  72.         Case $msg = $GUI_EVENT_CLOSE
  73.             ExitLoop
  74.         Case $msg = $canary
  75.             ; 1 weitergeben an updater funktion fuer canary channel
  76.             Updater(1)
  77.         Case $msg = $dev
  78.             ; 2 weiergeben an updater funktion fuer beta channel
  79.             Updater(2)
  80.         Case $msg = $beta
  81.             ; 3 weitergeben an updater funktion fuer release channel
  82.             Updater(3)
  83.         Case $msg = $release
  84.             ; 4 weitergeben an updater funktion fuer release channel
  85.             Updater(4)
  86.         EndSelect
  87. WEnd
  88.  
  89. Func Updater($channel)
  90.  
  91.     ; versionskontrolle checkbox auslesen
  92.     $vstate = GUICtrlRead($vcheck)
  93.  
  94.     ; gui schliessen
  95.     GUIDelete()
  96.  
  97.     ; update ordner anlegen
  98.     DirCreate( @ScriptDir&"\Update" )
  99.  
  100.     ; updates ordner anlegen für versionskontrolle
  101.     DirCreate( @ScriptDir&"\Chrome\updates" )
  102.  
  103.     If $channel = 1 Then
  104.         ;Canary-Channel
  105.         $data='<?xml version="1.0" encoding="UTF-8"?><o:gupdate xmlns:o="http://www.google.com/update2/request" protocol="2.0" version="1.2.183.13" ismachine="0" machineid="{11111111-1111-1111-1111-111111111111}" userid="{11111111-1111-1111-1111-111111111111}" requestid="{11111111-1111-1111-1111-111111111111}"><o:os platform="win" version="5.1" sp="Service Pack 3"/><o:app appid="{4EA16AC7-FD5A-47C3-875B-DBF4A2008C20}" version="" lang="de" brand="" client="" iid="{11111111-1111-1111-1111-111111111111}"><o:updatecheck/></o:app></o:gupdate>'
  106.     ElseIf $channel = 2 Then
  107.         ;Dev-Channel
  108.         $data='<?xml version="1.0" encoding="UTF-8"?><o:gupdate xmlns:o="http://www.google.com/update2/response" protocol="2.0" version="1.2.183.13" ismachine="0" machineid="{11111111-1111-1111-1111-111111111111}" userid="{11111111-1111-1111-1111-111111111111}" requestid="{11111111-1111-1111-1111-111111111111}"><o:os platform="win" version="5.1" sp="Service Pack 3"/><o:app appid="{8A69D345-D564-463C-AFF1-A69D9E530F96}" version="" lang="de" brand="" client="" iid="{11111111-1111-1111-1111-111111111111}"><o:updatecheck tag="2.0-dev"/></o:app></o:gupdate>'
  109.     ElseIf $channel = 3 Then
  110.         ;Beta-Channel
  111.         $data='<?xml version="1.0" encoding="UTF-8"?><o:gupdate xmlns:o="http://www.google.com/update2/request" protocol="2.0" version="1.2.183.13" ismachine="0" machineid="{11111111-1111-1111-1111-111111111111}" userid="{11111111-1111-1111-1111-111111111111}" requestid="{11111111-1111-1111-1111-111111111111}"><o:os platform="win" version="5.1" sp="Service Pack 3"/><o:app appid="{8A69D345-D564-463C-AFF1-A69D9E530F96}" version="" lang="de" brand="" client="" iid="{11111111-1111-1111-1111-111111111111}"><o:updatecheck tag="1.1-beta"/></o:app></o:gupdate>'
  112.     ElseIf $channel = 4 Then
  113.         ;Final-Channel
  114.         $data='<?xml version="1.0" encoding="UTF-8"?><o:gupdate xmlns:o="http://www.google.com/update2/request" protocol="2.0" version="1.2.183.13" ismachine="0" machineid="{11111111-1111-1111-1111-111111111111}" userid="{11111111-1111-1111-1111-111111111111}" requestid="{11111111-1111-1111-1111-111111111111}"><o:os platform="win" version="5.1" sp="Service Pack 3"/><o:app appid="{8A69D345-D564-463C-AFF1-A69D9E530F96}" version="" lang="de" brand="" client="" iid="{11111111-1111-1111-1111-111111111111}"><o:updatecheck/></o:app></o:gupdate>'
  115.     EndIf
  116.  
  117.         ; aktuellen chrome ermitteln
  118.         $hw_open = _WinHttpOpen()
  119.         $hw_connect = _WinHttpConnect($hw_open, "tools.google.com")
  120.         $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/service/update2","HTTP/1.1", "http://tools.google.com/")
  121.         _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF, $data)
  122.         _WinHttpReceiveResponse($h_openRequest)
  123.  
  124.         Local $body=""
  125.         Do
  126.             $body&=_WinHttpReadData($h_openRequest)
  127.         Until @error
  128.         $position = StringInStr( $body,"codebase=" )
  129.         $urltmp = StringMid( $body,$position+10,Stringlen($body)-$position-10 )
  130.         $url = StringSplit( $urltmp, '"')
  131.  
  132.         ; keine url geliefert
  133.         If Not $url[1] Then
  134.             If @OSLang = 0407 Then
  135.                 MsgBox( 0,"Chrome Updater","Es wurde keine URL zurückgegeben!" )
  136.             Else
  137.                 MsgBox( 0,"Chrome Updater","Request failure!" )
  138.             EndIf
  139.             DirRemove( @ScriptDir&"\Update", 1)
  140.             Exit
  141.         EndIf
  142.  
  143.         _WinHttpCloseHandle($h_openRequest)
  144.         _WinHttpCloseHandle($hw_connect)
  145.         _WinHttpCloseHandle($hw_open)
  146.  
  147.         $update_url = $url[1]
  148.  
  149.         ; url splitten und version aus der url auslesen
  150.         $v_temp = StringSplit( $update_url, "/" ,0 )
  151.         $version = $v_temp[7]
  152.  
  153.         ; versionskontrolle an/aus
  154.         If $vstate > 1 Then
  155.             ; falls versionsdatei existiert, updateurl zurücksetzen
  156.             If FileExists( @ScriptDir&"\Chrome\updates\"&$version&".txt" ) Then $update_url = ""
  157.         Else
  158.             ; versionskontrolle nicht beachten, vorhandene versions.txt löschen
  159.             FileDelete( @ScriptDir&"\Chrome\updates\"&$version&".txt" )
  160.         EndIf
  161.  
  162.         ; nichts gefunden, beenden
  163.         If Not $update_url Then
  164.             If @OSLang = 0407 Then
  165.                 MsgBox( 0,"Chrome Updater","Keine neue Version gefunden!" )
  166.             Else
  167.                 MsgBox( 0,"Chrome Updater","No new version available!" )
  168.             EndIf
  169.             DirRemove( @ScriptDir&"\Update", 1)
  170.             Exit
  171.         EndIf
  172.  
  173.         ; progress fenster
  174.             ; chrome download
  175.             $window = GUICreate( "Chrome Download", 306, 40 )
  176.  
  177.         $progressbar = GUICtrlCreateProgress( 9, 15, 286, 17 )
  178.         GUISetState( @SW_SHOW )
  179.  
  180.         ; dateigröße
  181.         $fileSize = InetGetSize( $update_url )
  182.  
  183.         ; setup holen
  184.         $hDownload = InetGet ( $update_url, @ScriptDir&"\Update\chrome_aktuell.exe" ,0 ,1 )
  185.  
  186.         Do
  187.             $percent = Round( ((InetGetInfo($hDownload,0) / $fileSize) * 100) ) & "%"
  188.             GUICtrlSetData( $progressbar, $percent )
  189.             $msg = GUIGetMsg()
  190.             ; falls progressfenster geschlossen wird, Download abbrechen, Update Ordner löschen und dann Exit
  191.             If $msg = $GUI_EVENT_CLOSE Then
  192.                 InetClose($hDownload)
  193.                 DirRemove( @ScriptDir&"\Update", 1)
  194.                 Exit
  195.             EndIf
  196.             Sleep(10)
  197.         Until InetGetInfo($hDownload, 2) ; schauen ob der download fertig ist
  198.         InetClose($hDownload) ; download ist fertig, inetget schliessen
  199.  
  200.         ; gui schliessen
  201.         GUIDelete()
  202.  
  203.     Sleep(50)
  204.  
  205.     ; Resources\Inspector Ordner löschen
  206.     DirRemove( @ScriptDir & "\Chrome\Resources\Inspector", 1 )
  207.  
  208.     ; 7za.exe inkludieren
  209.     FileInstall( "7za.exe", @ScriptDir&"\" )
  210.  
  211.         ; chrome setup entpacken
  212.         RunWait( "7za.exe x """&@ScriptDir&"\Update\chrome_aktuell.exe"" -o"""&@ScriptDir&"\Update""" )
  213.  
  214.         ; chrome.7z entpacken
  215.         RunWait( "7za.exe x """&@ScriptDir&"\Update\chrome.7z"" -o"""&@ScriptDir&"\Update\extracted""" )
  216.  
  217.         ; alles aus dem versionsnummern ordner in den Chrome Ordner
  218.         $first = FileFindFirstFile( @ScriptDir&"\Update\extracted\Chrome-bin\*.*" )
  219.         $versions_ordner = FileFindNextFile( $first )
  220.         FileClose( $first )
  221.         DirCopy( @ScriptDir&"\Update\extracted\Chrome-bin\"&$versions_ordner&"\", @ScriptDir&"\Chrome\", 1 )
  222.  
  223.         ; restlichen Dateien und Ordner
  224.         FileCopy( @ScriptDir &"\Update\extracted\Chrome-bin\chrome.exe", @ScriptDir&"\Chrome\" ,1 )
  225.         FileCopy( @ScriptDir &"\Update\extracted\Chrome-bin\wow_helper.exe", @ScriptDir&"\Chrome\" ,1 )
  226.         DirCopy( @ScriptDir &"\Update\extraced\Dictionaries", @ScriptDir&"\Chrome\" ,1 )
  227.  
  228.         ; versions datei nach Chrome\updates schreiben
  229.         $av_temp = FileFindFirstFile( @ScriptDir&"\Chrome\updates\*.txt" )
  230.         $alte_version = FileFindNextFile( $av_temp )
  231.         FileClose( $av_temp )
  232.         FileDelete( @ScriptDir&"\Chrome\updates\"&$alte_version )
  233.         FileWrite( @ScriptDir&"\Chrome\updates\"&$version&".txt", "" )
  234.  
  235.     ; alles aufräumen
  236.     FileDelete( @ScriptDir &"\7za.exe" )
  237.     DirRemove( @ScriptDir &"\Update\" , 1 )
  238.  
  239.     ; message Box ausgeben wenn mit Update fertig
  240.     If @OSLang = 0407 Then
  241.             MsgBox( 0,"Chrome Updater","Chrome aktualisiert" )
  242.     Else
  243.             MsgBox( 0,"Chrome Updater","Chrome updated" )
  244.     EndIf
  245.     ; updater beenden
  246.     Exit
  247. EndFunc
RAW Paste Data