Advertisement
Guest User

Chrome Updater

a guest
Mar 30th, 2010
777
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 10.68 KB | None | 0 0
  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. $dev = GUICtrlCreateButton ( "Dev Channel",  10, 30, 100 )
  62. $beta = GUICtrlCreateButton ( "Beta Channel",  0, -1 )
  63. $release = GUICtrlCreateButton ( "Release Channel",  0, -1 )
  64. $chromium = GUICtrlCreateButton ( "Chromium",  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 = $dev
  75.             ; 1 weiergeben an updater funktion fuer beta channel
  76.             Updater(1)
  77.         Case $msg = $beta
  78.             ; 2 weitergeben an updater funktion fuer release channel
  79.             Updater(2)
  80.         Case $msg = $release
  81.             ; 3 weitergeben an updater funktion fuer release channel
  82.             Updater(3)
  83.         Case $msg = $chromium
  84.             ; 4 weitergeben an updater funktion fuer chromium latest
  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.         ;Dev-Channel
  105.         $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>'
  106.     ElseIf $channel = 2 Then
  107.         ;Beta-Channel
  108.         $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>'
  109.     ElseIf $channel = 3 Then
  110.         ;Final-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/></o:app></o:gupdate>'
  112.     ElseIf $channel = 4 Then
  113.         ;Chromium
  114.         $data = "http://build.chromium.org/buildbot/continuous/LATEST/chrome-win32.zip"
  115.     EndIf
  116.  
  117.     If $channel < 4 Then
  118.         ; aktuellen chrome ermitteln
  119.         $hw_open = _WinHttpOpen()
  120.         $hw_connect = _WinHttpConnect($hw_open, "tools.google.com")
  121.         $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/service/update2","HTTP/1.1", "http://tools.google.com/")
  122.         _WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF, $data)
  123.         _WinHttpReceiveResponse($h_openRequest)
  124.  
  125.         Local $body=""
  126.         Do
  127.             $body&=_WinHttpReadData($h_openRequest)
  128.         Until @error
  129.         $position = StringInStr( $body,"codebase=" )
  130.         $urltmp = StringMid( $body,$position+10,Stringlen($body)-$position-10 )
  131.         $url = StringSplit( $urltmp, '"')
  132.  
  133.         ; keine url geliefert
  134.         If Not $url[1] Then
  135.             If @OSLang = 0407 Then
  136.                 MsgBox( 0,"Chrome Updater","Es wurde keine URL zurückgegeben!" )
  137.             Else
  138.                 MsgBox( 0,"Chrome Updater","Request failure!" )
  139.             EndIf
  140.             DirRemove( @ScriptDir&"\Update", 1)
  141.             Exit
  142.         EndIf
  143.  
  144.         _WinHttpCloseHandle($h_openRequest)
  145.         _WinHttpCloseHandle($hw_connect)
  146.         _WinHttpCloseHandle($hw_open)
  147.  
  148.         $update_url = $url[1]
  149.  
  150.         ; url splitten und version aus der url auslesen
  151.         $v_temp = StringSplit( $update_url, "/" ,0 )
  152.         $version = $v_temp[7]
  153.  
  154.         ; versionskontrolle an/aus
  155.         If $vstate > 1 Then
  156.             ; falls versionsdatei existiert, updateurl zurücksetzen
  157.             If FileExists( @ScriptDir&"\Chrome\updates\"&$version&".txt" ) Then $update_url = ""
  158.         Else
  159.             ; versionskontrolle nicht beachten, vorhandene versions.txt löschen
  160.             FileDelete( @ScriptDir&"\Chrome\updates\"&$version&".txt" )
  161.         EndIf
  162.  
  163.         ; nichts gefunden, beenden
  164.         If Not $update_url Then
  165.             If @OSLang = 0407 Then
  166.                 MsgBox( 0,"Chrome Updater","Keine neue Version gefunden!" )
  167.             Else
  168.                 MsgBox( 0,"Chrome Updater","No new version available!" )
  169.             EndIf
  170.             DirRemove( @ScriptDir&"\Update", 1)
  171.             Exit
  172.         EndIf
  173.     Else
  174.         ; chromium, also update_url auf $data setzen
  175.         $update_url = $data
  176.     EndIf
  177.  
  178.     ; wget.exe gefunden, datei mit wget downloaden
  179.     If FileExists( @ScriptDir & "\wget.exe" ) Then
  180.         RunWait( @ScriptDir & "\wget.exe "&$update_url&"", @ScriptDir&"\Update" )
  181.         ; erste Datei suchen im Ordner Update
  182.         $chrome_temp = FileFindFirstFile( @ScriptDir&"\Update\*.exe" )
  183.         $chrome_setup = FileFindNextFile( $chrome_temp )
  184.         FileClose( $chrome_setup )
  185.         FileMove( @ScriptDir&"\Update\"&$chrome_setup, @ScriptDir&"\Update\chrome_aktuell.exe" )
  186.     Else
  187.         ; kein wget gefunden, also normal mit autoit downloaden
  188.  
  189.         ; progress fenster
  190.         If $channel < 4 Then
  191.             ; chrome download
  192.             $window = GUICreate( "Chrome Download", 306, 40 )
  193.         Else
  194.             ; chromium
  195.             $window = GUICreate( "Chromium Download", 306, 40 )
  196.         EndIf
  197.         $progressbar = GUICtrlCreateProgress( 9, 15, 286, 17 )
  198.         GUISetState( @SW_SHOW )
  199.  
  200.         ; dateigröße
  201.         $fileSize = InetGetSize( $update_url )
  202.  
  203.         ; setup holen
  204.         $hDownload = InetGet ( $update_url, @ScriptDir&"\Update\chrome_aktuell.exe" ,0 ,1 )
  205.  
  206.         Do
  207.             $percent = Round( ((InetGetInfo($hDownload,0) / $fileSize) * 100) ) & "%"
  208.             GUICtrlSetData( $progressbar, $percent )
  209.             $msg = GUIGetMsg()
  210.             ; falls progressfenster geschlossen wird, Download abbrechen, Update Ordner löschen und dann Exit
  211.             If $msg = $GUI_EVENT_CLOSE Then
  212.                 InetClose($hDownload)
  213.                 DirRemove( @ScriptDir&"\Update", 1)
  214.                 Exit
  215.             EndIf
  216.             Sleep(10)
  217.         Until InetGetInfo($hDownload, 2) ; schauen ob der download fertig ist
  218.         InetClose($hDownload) ; download ist fertig, inetget schliessen
  219.  
  220.         ; gui schliessen
  221.         GUIDelete()
  222.     EndIf
  223.  
  224.     Sleep(50)
  225.  
  226.     ; Resources\Inspector Ordner löschen
  227.     DirRemove( @ScriptDir & "\Chrome\Resources\Inspector", 1 )
  228.  
  229.     ; 7za.exe inkludieren
  230.     FileInstall( "7za.exe", @ScriptDir&"\" )
  231.  
  232.     If $channel < 4 Then
  233.         ; chrome setup entpacken
  234.         RunWait( "7za.exe x """&@ScriptDir&"\Update\chrome_aktuell.exe"" -o"""&@ScriptDir&"\Update""" )
  235.  
  236.         ; chrome.7z entpacken
  237.         RunWait( "7za.exe x """&@ScriptDir&"\Update\chrome.7z"" -o"""&@ScriptDir&"\Update\extracted""" )
  238.     Else
  239.         ; chromium setup entpacken
  240.         RunWait( "7za.exe x """&@ScriptDir&"\Update\chrome_aktuell.exe"" -o"""&@ScriptDir&"\Update""" )
  241.     EndIf
  242.  
  243.     If $channel < 4 Then
  244.         ; alles aus dem versionsnummern ordner in den Chrome Ordner
  245.         $first = FileFindFirstFile( @ScriptDir&"\Update\extracted\Chrome-bin\*.*" )
  246.         $versions_ordner = FileFindNextFile( $first )
  247.         FileClose( $first )
  248.         DirCopy( @ScriptDir&"\Update\extracted\Chrome-bin\"&$versions_ordner&"\", @ScriptDir&"\Chrome\", 1 )
  249.  
  250.         ; restlichen Dateien und Ordner
  251.         FileCopy( @ScriptDir &"\Update\extracted\chrome.exe", @ScriptDir&"\Chrome\" ,1 )
  252.         DirCopy( @ScriptDir &"\Update\extraced\Dictionaries", @ScriptDir&"\Chrome\" ,1 )
  253.  
  254.         ; versions datei nach Chrome\updates schreiben
  255.         $av_temp = FileFindFirstFile( @ScriptDir&"\Chrome\updates\*.txt" )
  256.         $alte_version = FileFindNextFile( $av_temp )
  257.         FileClose( $av_temp )
  258.         FileDelete( @ScriptDir&"\Chrome\updates\"&$alte_version )
  259.         FileWrite( @ScriptDir&"\Chrome\updates\"&$version&".txt", "" )
  260.     Else
  261.         ; chromium benutzt chrome-win32, also alles aus diesem ordner kopieren
  262.         DirCopy( @ScriptDir&"\Update\chrome-win32\", @ScriptDir&"\Chrome\", 1 )
  263.         ; versions datei löschen
  264.         $av_temp = FileFindFirstFile( @ScriptDir&"\Chrome\updates\*.txt" )
  265.         $alte_version = FileFindNextFile( $av_temp )
  266.         FileClose( $av_temp )
  267.         FileDelete( @ScriptDir&"\Chrome\updates\"&$alte_version )
  268.     EndIf
  269.  
  270.     ; alles aufräumen
  271.     FileDelete( @ScriptDir &"\7za.exe" )
  272.     DirRemove( @ScriptDir &"\Update\" , 1 )
  273.  
  274.     ; message Box ausgeben wenn mit Update fertig
  275.     If @OSLang = 0407 Then
  276.         If $channel < 4 Then
  277.             MsgBox( 0,"Chrome Updater","Chrome aktualisiert" )
  278.         Else
  279.             MsgBox( 0,"Chrome Updater","Chromium aktualisiert" )
  280.         EndIf
  281.     Else
  282.         If $channel < 4 Then
  283.             MsgBox( 0,"Chrome Updater","Chrome updated" )
  284.         Else
  285.             MsgBox( 0,"Chrome Updater","Chromium updated" )
  286.         EndIf
  287.     EndIf
  288.     ; updater beenden
  289.     Exit
  290. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement