Advertisement
Guest User

Untitled

a guest
May 13th, 2016
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 17.16 KB | None | 0 0
  1. #NoTrayIcon
  2.  
  3. ;Обновление утилит NirSoft (скачивается NirLauncher) и дополнительных файлов:
  4. ;  файлы локализации (русский язык), oui.txt, usb.ids, GeoLiteCity.dat.gz, whois-servers.txt
  5. ;  и справка NirCmd (nircmd.html, nircmd2.html, main.css).
  6. ;Перед и после обновления папка с утилитами пакуется в zip-архив на случай какого-нибудь сбоя.
  7. ;
  8. ;Если скачались не все файлы  то выводится окно со списком недостающих: если nirsoft_package_*.zip
  9. ;  и nirsoft_package_russian.zip слиты - можно подтвердить начало обновления.
  10. ;
  11. ;Проверяется только версия и дата NirLauncher! Локальная версия и дата хранятся в NirSoftUpdate.ini,
  12. ;  в нем же - правила для копирования файлов *.exe и *.chm (структура каталога не соответствует
  13. ;  NirLauncher, меню для запуска - PopSel (запуск утилит скриптом - один пункт меню и автоматический
  14. ;  выбор разрядности утилит), она же и автоматом генерирует меню для *.chm и справки NirCmd).
  15. ;
  16. ;Необходимы: wget (NirLauncher сливется с ключом --referer) и 7z.exe для распаковки nirsoft_package*.zip
  17. ;  и nirsoft_package_russian.zip (добавлен в Total7zip в т.ч. и для этого)
  18.  
  19. Opt('WinWaitDelay', 100)
  20. Opt("GUICloseOnESC", 0)
  21.  
  22. Global Const $GUI_CHECKED = 1
  23. Global Const $GUI_ENABLE = 64
  24. Global Const $GUI_DISABLE = 128
  25. Global Const $SS_RIGHT = 0x2
  26.  
  27. Local $COMMANDER_PATH = EnvGet('COMMANDER_PATH'), $sTemp = EnvGet('TEMP'), $sVerC, $sDateC, $Radio1, $Radio2, $Version, $Date, $Button, $StatusBar
  28.  
  29. ;Запрет одновременного запуска более одной копии скрипта
  30. If WinExists(@ScriptName) Then
  31.     MsgBox(48 + 4096, 'NirSoftUpdate.au3', 'Скрипт NirSoftUpdate уже запущен!')
  32.     Exit
  33. EndIf
  34. AutoItWinSetTitle(@ScriptName)
  35.  
  36. $sVerC = IniRead(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentVersion', '---')
  37. $sDateC = IniRead(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentDate', '---')
  38.  
  39. GUICreate('Nirsoft Update', 210, 140)
  40. $Radio1 = GUICtrlCreateRadio('Бэкап', 10, 40, 100, 20)
  41. $Radio2 = GUICtrlCreateRadio('Бэкап + обновление', 10, 60, 200, 20)
  42. GUICtrlSetState($Radio2, $GUI_CHECKED)
  43. $Version = GUICtrlCreateLabel($sVerC, 140, 5, 65, 20, $SS_RIGHT)
  44. $Date = GUICtrlCreateLabel($sDateC, 45, 25, 160, 20, $SS_RIGHT)
  45. $Button = GUICtrlCreateButton('Запустить', 55, 90, 100, 22)
  46. $StatusBar = GUICtrlCreateLabel('', 5, 140 - 20, 200, 17)
  47. Local $aAccelKeys[1][2] = [['{Enter}', $Button]]
  48. GUISetAccelerators($aAccelKeys)
  49. GUISetState()
  50.  
  51. While 1
  52.     Switch GUIGetMsg()
  53.         Case $Button
  54.             If GUICtrlRead($Radio1) = 1 Then
  55.                 __Backup()
  56.                 Exit
  57.             ElseIf GUICtrlRead($Radio2) = 1 Then
  58.                 __GetVerDownloadUnpackCopyNew()
  59.                 Exit
  60.             EndIf
  61.         Case -3
  62.             Exit
  63.     EndSwitch
  64. WEnd
  65.  
  66. Func __Backup()
  67.     Local $sDate, $sTime
  68.     GUICtrlSetState($Button, $GUI_DISABLE)
  69.     GUICtrlSetData($StatusBar, 'Архивирование...')
  70.     $sDate = @YEAR & @MON & @MDAY
  71.     $sTime = @HOUR & @MIN & @SEC
  72.     RunWait('"' & $COMMANDER_PATH & '\Plugins\wcx\Total7zip\7z.exe" a -tzip "' & $COMMANDER_PATH & '\Utilities\nirsoft_backup' & $sDate & '_' & $sTime & '.zip" "' & $COMMANDER_PATH & '\Utilities\NirSoft\*"', '', @SW_HIDE)
  73.     GUICtrlSetData($StatusBar, '')
  74.     GUICtrlSetState($Button, $GUI_ENABLE)
  75. EndFunc
  76.  
  77. Func __GetVerDownloadUnpackCopyNew()
  78.     Local $bGetInfo, $sGetInfo, $VerInfo, $sVer, $sDateInfo, $sDate, $aArray, $i, $iDate, $inirsoftfiles, $iniFile, $sErr = ''
  79.     GUICtrlSetState($Button, $GUI_DISABLE)
  80.     GUICtrlSetData($StatusBar, 'Проверка версии...')
  81.     $bGetInfo = InetRead('http://launcher.nirsoft.net/download.html', 1 + 16)
  82.     If @error Then
  83.         MsgBox(4096, 'NirSoftUpdate.au3', 'Сайт недоступен.')
  84.         Exit
  85.     EndIf
  86.     InetClose($bGetInfo)
  87.     $sGetInfo = BinaryToString($bGetInfo)
  88.     $VerInfo = StringRegExp($sGetInfo, 'nirsoft_package_[0-9\.]+\.zip', 1)
  89.     If @error Then
  90.         MsgBox(4096, 'NirSoftUpdate.au3', 'Нет совпадений с "nirsoft_package_[0-9\.]+\.zip" или неправильный шаблон.')
  91.         Exit
  92.     EndIf
  93.     If IsArray($VerInfo) Then
  94.         $sVer = StringRegExpReplace($VerInfo[0], "(nirsoft_package_)([0-9\.]+)(\.zip)", '\2')
  95.     Else
  96.         MsgBox(4096, 'NirSoftUpdate.au3', 'Неизвестная ошибка, проверьте скрипт.')
  97.     EndIf
  98.     $sDateInfo = StringRegExp($sGetInfo, '\<td\>Updated On:[\r\n]{1,2}\<td\>[\r\n]{1,2}([A-Za-z0-9:\s]+)[\r\n]{1,2}\</table\>', 1)
  99.     If @error Then
  100.         MsgBox(4096, 'NirSoftUpdate.au3', 'Не найдена информация о версии')
  101.         Exit
  102.     EndIf
  103.     If IsArray($sDateInfo) Then
  104.         $sDate = StringRegExpReplace($sDateInfo[0], '([A-Za-z]{3,9}) ([0-9]{1,2}) ([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2})', '\3\1\2\4\5\6')
  105.         Local $aArray[13]
  106.         $aArray[0] = '12'
  107.         $aArray[1] = 'January'
  108.         $aArray[2] = 'February'
  109.         $aArray[3] = 'March'
  110.         $aArray[4] = 'April'
  111.         $aArray[5] = 'May'
  112.         $aArray[6] = 'June'
  113.         $aArray[7] = 'July'
  114.         $aArray[8] = 'August'
  115.         $aArray[9] = 'September'
  116.         $aArray[10] = 'October'
  117.         $aArray[11] = 'November'
  118.         $aArray[12] = 'December'
  119.         For $i = 1 To $aArray[0]
  120.             $iDate = ''
  121.             If StringLen($i) = 1 Then
  122.                 $iDate = StringReplace($sDate, $aArray[$i], '0' & $i, 0, 0)
  123.                 If @extended = 1 Then ExitLoop
  124.             Else
  125.                 $iDate = StringReplace($sDate, $aArray[$i], $i, 0, 0)
  126.                 If @extended = 1 Then ExitLoop
  127.             EndIf
  128.         Next
  129.         $sDate = StringRegExpReplace($iDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '\1-\2-\3 \4:\5:\6')
  130.     Else
  131.         MsgBox(4096, 'NirSoftUpdate.au3', 'Неизвестная ошибка, проверьте скрипт.')
  132.     EndIf
  133.     GUICtrlSetData($StatusBar, '')
  134.     GUICtrlSetState($Button, $GUI_ENABLE)
  135.     Switch MsgBox(4 + 4096, 'NirSoftUpdate.au3', 'Текущая версия: ' & @TAB & $sVerC & ' (' & $sDateC & ')' & @CRLF & 'На сервере: ' & @TAB & $sVer & ' (' & $sDate & ')' & @CRLF & @CRLF & 'Обновляемся?')
  136.         Case 6
  137.             DirCreate($sTemp & '\nirsoft')
  138.             GUICtrlSetState($Button, $GUI_DISABLE)
  139.             GUICtrlSetData($StatusBar, 'Загрузка новой версии...')
  140. #cs
  141.             $hNirSoft_package = InetGet('http://download.nirsoft.net/' & $VerInfo[0], $sTemp & '\nirsoft\nirsoft_package.zip', 1)
  142.             If @error Then
  143.                 $hNirSoft_package = InetGet('http://download2.nirsoft.net/' & $VerInfo[0], $sTemp & '\nirsoft\' & $VerInfo[0], 1)
  144.                 If @error Then
  145.                     MsgBox(4096, 'NirSoftUpdate.au3', 'Файл ' & $VerInfo[0] & ' недоступен.')
  146.                     InetClose($hNirSoft_package)
  147.                     Exit
  148.                 EndIf
  149.             EndIf
  150.             InetClose($hNirSoft_package)
  151.             $hNirSoft_package_russian = InetGet('http://download.nirsoft.net/nirsoft_package_russian.zip', $sTemp & '\nirsoft\nirsoft_package_russian.zip', 1)
  152.             If @error Then
  153.                 MsgBox(4096, 'NirSoftUpdate.au3', 'Файл nirsoft_package_russian.zip недоступен.')
  154.                 Exit
  155.             EndIf
  156.             InetClose($hNirSoft_package_russian)
  157.             $hNirSoft_add1 = InetGet('http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz', $sTemp & '\nirsoft\GeoLiteCity.dat.gz', 1)
  158.             InetClose($hNirSoft_add1)
  159.             $hNirSoft_add2 = InetGet('http://standards.ieee.org/develop/regauth/oui/oui.txt', $sTemp & '\nirsoft\oui.txt', 1)
  160.             InetClose($hNirSoft_add2)
  161.             $hNirSoft_add3 = InetGet('http://www.linux-usb.org/usb.ids', $sTemp & '\nirsoft\usb.ids', 1)
  162.             InetClose($hNirSoft_add3)
  163.             $hNirSoft_add4 = InetGet('http://www.nirsoft.net/main.css', $sTemp & '\nirsoft\main.css', 1)
  164.             InetClose($hNirSoft_add4)
  165.             $hNirSoft_add5 = InetGet('http://www.nirsoft.net/utils/nircmd.html', $sTemp & '\nirsoft\nircmd.html', 1)
  166.             InetClose($hNirSoft_add5)
  167.             $hNirSoft_add6 = InetGet('http://www.nirsoft.net/utils/nircmd2.html', $sTemp & '\nirsoft\nircmd2.html', 1)
  168.             InetClose($hNirSoft_add6)
  169. #ce
  170.             FileChangeDir($sTemp & '\nirsoft')
  171.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet --referer=http://launcher.nirsoft.net/ http://download.nirsoft.net/' & $VerInfo[0], '', @SW_HIDE)
  172.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet --referer=http://launcher.nirsoft.net/ http://download.nirsoft.net/nirsoft_package_russian.zip', '', @SW_HIDE)
  173.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://standards-oui.ieee.org/oui/oui.txt', '', @SW_HIDE)
  174.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz', '', @SW_HIDE)
  175.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.linux-usb.org/usb.ids', '', @SW_HIDE)
  176.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/whois-servers.txt', '', @SW_HIDE)
  177.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/main.css', '', @SW_HIDE)
  178.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/utils/nircmd.html', '', @SW_HIDE)
  179.             Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/utils/nircmd2.html', '', @SW_HIDE)
  180.             While ProcessExists('wget.exe')
  181.                 Sleep(1000)
  182.             WEnd
  183.             $inirsoftfiles = DirGetSize($sTemp & '\nirsoft', 1)
  184.             If $inirsoftfiles[1] < 9 Then
  185.                 If Not FileExists($sTemp & '\nirsoft\main.css') Then $sErr &= @TAB & 'main.css' & @CRLF
  186.                 If Not FileExists($sTemp & '\nirsoft\GeoLiteCity.dat.gz') Then $sErr &= @TAB & 'GeoLiteCity.dat.gz' & @CRLF
  187.                 If Not FileExists($sTemp & '\nirsoft\nircmd.html') Then $sErr &= @TAB & 'nircmd.html' & @CRLF
  188.                 If Not FileExists($sTemp & '\nirsoft\nircmd2.html') Then $sErr &= @TAB & 'nircmd2.html' & @CRLF
  189.                 If Not FileExists($sTemp & '\nirsoft\usb.ids') Then $sErr &= @TAB & 'usb.ids' & @CRLF
  190.                 If Not FileExists($sTemp & '\nirsoft\oui.txt') Then $sErr &= @TAB & 'oui.txt' & @CRLF
  191.                 If Not FileExists($sTemp & '\nirsoft\whois-servers.txt') Then $sErr &= @TAB & 'whois-servers.txt' & @CRLF
  192.                 If Not FileExists($sTemp & '\nirsoft\' &  $VerInfo[0]) Then $sErr &= @TAB &  $VerInfo[0] & @CRLF
  193.                 If Not FileExists($sTemp & '\nirsoft\nirsoft_package_russian.zip') Then $sErr &= @TAB & 'nirsoft_package_russian.zip' & @CRLF
  194.                 If MsgBox(4 + 48 + 4096, 'NirSoftUpdate.au3', 'Произошла какая-то ошибка, скачались не все файлы!' & @CRLF & _
  195.                    'Отсутствуют:' & @CRLF & $sErr & @CRLF & 'Необходимы nirsoft_package_*.zip и nirsoft_package_russian.zip, продолжаем?') = 7 Then
  196.                     FileSetAttrib('"' & $sTemp & '\nirsoft"', '-RASHNOT', 1)
  197.                     DirRemove($sTemp & '\nirsoft', 1)
  198.                     Exit
  199.                 EndIf
  200.             EndIf
  201.             FileChangeDir(@ScriptDir)
  202.         Case 7
  203.             Exit
  204.     EndSwitch
  205.  
  206.     __Backup()
  207.  
  208.     GUICtrlSetData($StatusBar, 'Обновление файлов...')
  209.  
  210.     RunWait('"' & $COMMANDER_PATH & '\Plugins\wcx\Total7zip\7z.exe" x "' & $sTemp & '\nirsoft\' & $VerInfo[0] & '" -o"' & $sTemp & '\nirsoft\nirsoft_package"', $sTemp & '\nirsoft', @SW_HIDE)
  211.     RunWait('"' & $COMMANDER_PATH & '\Plugins\wcx\Total7zip\7z.exe" x "' & $sTemp & '\nirsoft\nirsoft_package_russian.zip" -o"' & $sTemp & '\nirsoft\nirsoft_package_russian"', $sTemp & '\nirsoft', @SW_HIDE)
  212.     ;x86
  213.     $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x86')
  214.     If @error Then
  215.         MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
  216.     Else
  217.         For $i = 1 To $iniFile[0][0]
  218.             FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\' & $iniFile[$i][0] & '.exe', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '.exe', 1)
  219.         Next
  220.     EndIf
  221.     ;x64
  222.     $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x64')
  223.     If @error Then
  224.         MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
  225.     Else
  226.         For $i = 1 To $iniFile[0][0]
  227.             FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\' & $iniFile[$i][0] & '.exe', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '-x64.exe', 1)
  228.         Next
  229.     EndIf
  230.     ;chm
  231.     $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'chm')
  232.     If @error Then
  233.         MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
  234.     Else
  235.         For $i = 1 To $iniFile[0][0]
  236.             FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\' & $iniFile[$i][0], @ScriptDir & '\NirSoft\help\' & $iniFile[$i][1], 1)
  237.         Next
  238.     EndIf
  239.     ;x86lang
  240.     $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x86lang')
  241.     If @error Then
  242.         MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
  243.     Else
  244.         For $i = 1 To $iniFile[0][0]
  245.             FileCopy($sTemp & '\nirsoft\nirsoft_package_russian\' & $iniFile[$i][0], @ScriptDir & '\NirSoft\' & $iniFile[$i][1], 1)
  246.         Next
  247.     EndIf
  248.     ;x64lang
  249.     $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x64lang')
  250.     If @error Then
  251.         MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
  252.     Else
  253.         For $i = 1 To $iniFile[0][0]
  254.             FileCopy($sTemp & '\nirsoft\nirsoft_package_russian\' & $iniFile[$i][0] & '_lng.ini', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '-x64_lng.ini', 1)
  255.         Next
  256.     EndIf
  257.  
  258.     FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\nircmd.exe', @ScriptDir & '\NirSoft\x86\nircmd.exe', 1)
  259.     FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\nircmdc.exe', @ScriptDir & '\NirSoft\x86\nircmdc.exe', 1)
  260.     FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\nircmd.exe', @ScriptDir & '\NirSoft\x64\nircmd.exe', 1)
  261.     FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\nircmdc.exe', @ScriptDir & '\NirSoft\x64\nircmdc.exe', 1)
  262.     FileCopy($sTemp & '\nirsoft\GeoLiteCity.dat.gz', @ScriptDir & '\NirSoft\GeoLiteCity.dat.gz', 1)
  263.     FileCopy($sTemp & '\nirsoft\oui.txt', @ScriptDir & '\NirSoft\oui.txt', 1)
  264.     FileCopy($sTemp & '\nirsoft\usb.ids', @ScriptDir & '\NirSoft\usb.ids', 1)
  265.     FileCopy($sTemp & '\nirsoft\whois-servers.txt', @ScriptDir & '\NirSoft\whois-servers.txt', 1)
  266.     ;help
  267.     If FileExists($sTemp & '\nirsoft\nircmd.html') Then
  268.         $hFile = FileOpen($sTemp & '\nirsoft\nircmd.html', 0 + 128)
  269.         $sChars = FileRead($hFile)
  270.         FileClose($hFile)
  271.         $sChars = StringReplace($sChars, '<link rel="stylesheet" href="../main.css">', '<link rel="stylesheet" href="main.css">')
  272.         $hFile = FileOpen($sTemp & '\nirsoft\nircmd.html', 2 + 128)
  273.         FileWrite($hFile, $sChars)
  274.         FileClose($hFile)
  275.         FileCopy($sTemp & '\nirsoft\nircmd.html', @ScriptDir & '\NirSoft\help\NirCmd Description.html', 1)
  276.         FileCopy($sTemp & '\nirsoft\main.css', @ScriptDir & '\NirSoft\help\main.css', 1)
  277.     EndIF
  278.     If FileExists($sTemp & '\nirsoft\nircmd2.html') Then
  279.         $hFile = FileOpen($sTemp & '\nirsoft\nircmd2.html', 0 + 128)
  280.         $sChars = FileRead($hFile)
  281.         FileClose($hFile)
  282.         $sChars = StringReplace($sChars, '<link rel="stylesheet" href="../main.css">', '<link rel="stylesheet" href="main.css">')
  283.         $hFile = FileOpen($sTemp & '\nirsoft\nircmd2.html', 2 + 128)
  284.         FileWrite($hFile, $sChars)
  285.         FileClose($hFile)
  286.         FileCopy($sTemp & '\nirsoft\nircmd2.html', @ScriptDir & '\NirSoft\help\NirCmd Full Help File.html', 1)
  287.     EndIF
  288.     FileSetAttrib('"' & $sTemp & '\nirsoft"', '-RASHNOT', 1)
  289.     DirRemove($sTemp & '\nirsoft', 1)
  290.  
  291.     GUICtrlSetData($StatusBar, '')
  292.     GUICtrlSetState($Button, $GUI_ENABLE)
  293.     IniWrite(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentVersion', $sVer)
  294.     IniWrite(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentDate', $sDate)
  295.  
  296.     __Backup()
  297. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement