Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #NoTrayIcon
- ;Обновление утилит NirSoft (скачивается NirLauncher) и дополнительных файлов:
- ; файлы локализации (русский язык), oui.txt, usb.ids, GeoLiteCity.dat.gz, whois-servers.txt
- ; и справка NirCmd (nircmd.html, nircmd2.html, main.css).
- ;Перед и после обновления папка с утилитами пакуется в zip-архив на случай какого-нибудь сбоя.
- ;
- ;Если скачались не все файлы то выводится окно со списком недостающих: если nirsoft_package_*.zip
- ; и nirsoft_package_russian.zip слиты - можно подтвердить начало обновления.
- ;
- ;Проверяется только версия и дата NirLauncher! Локальная версия и дата хранятся в NirSoftUpdate.ini,
- ; в нем же - правила для копирования файлов *.exe и *.chm (структура каталога не соответствует
- ; NirLauncher, меню для запуска - PopSel (запуск утилит скриптом - один пункт меню и автоматический
- ; выбор разрядности утилит), она же и автоматом генерирует меню для *.chm и справки NirCmd).
- ;
- ;Необходимы: wget (NirLauncher сливется с ключом --referer) и 7z.exe для распаковки nirsoft_package*.zip
- ; и nirsoft_package_russian.zip (добавлен в Total7zip в т.ч. и для этого)
- Opt('WinWaitDelay', 100)
- Opt("GUICloseOnESC", 0)
- Global Const $GUI_CHECKED = 1
- Global Const $GUI_ENABLE = 64
- Global Const $GUI_DISABLE = 128
- Global Const $SS_RIGHT = 0x2
- Local $COMMANDER_PATH = EnvGet('COMMANDER_PATH'), $sTemp = EnvGet('TEMP'), $sVerC, $sDateC, $Radio1, $Radio2, $Version, $Date, $Button, $StatusBar
- ;Запрет одновременного запуска более одной копии скрипта
- If WinExists(@ScriptName) Then
- MsgBox(48 + 4096, 'NirSoftUpdate.au3', 'Скрипт NirSoftUpdate уже запущен!')
- Exit
- EndIf
- AutoItWinSetTitle(@ScriptName)
- $sVerC = IniRead(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentVersion', '---')
- $sDateC = IniRead(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentDate', '---')
- GUICreate('Nirsoft Update', 210, 140)
- $Radio1 = GUICtrlCreateRadio('Бэкап', 10, 40, 100, 20)
- $Radio2 = GUICtrlCreateRadio('Бэкап + обновление', 10, 60, 200, 20)
- GUICtrlSetState($Radio2, $GUI_CHECKED)
- $Version = GUICtrlCreateLabel($sVerC, 140, 5, 65, 20, $SS_RIGHT)
- $Date = GUICtrlCreateLabel($sDateC, 45, 25, 160, 20, $SS_RIGHT)
- $Button = GUICtrlCreateButton('Запустить', 55, 90, 100, 22)
- $StatusBar = GUICtrlCreateLabel('', 5, 140 - 20, 200, 17)
- Local $aAccelKeys[1][2] = [['{Enter}', $Button]]
- GUISetAccelerators($aAccelKeys)
- GUISetState()
- While 1
- Switch GUIGetMsg()
- Case $Button
- If GUICtrlRead($Radio1) = 1 Then
- __Backup()
- Exit
- ElseIf GUICtrlRead($Radio2) = 1 Then
- __GetVerDownloadUnpackCopyNew()
- Exit
- EndIf
- Case -3
- Exit
- EndSwitch
- WEnd
- Func __Backup()
- Local $sDate, $sTime
- GUICtrlSetState($Button, $GUI_DISABLE)
- GUICtrlSetData($StatusBar, 'Архивирование...')
- $sDate = @YEAR & @MON & @MDAY
- $sTime = @HOUR & @MIN & @SEC
- RunWait('"' & $COMMANDER_PATH & '\Plugins\wcx\Total7zip\7z.exe" a -tzip "' & $COMMANDER_PATH & '\Utilities\nirsoft_backup' & $sDate & '_' & $sTime & '.zip" "' & $COMMANDER_PATH & '\Utilities\NirSoft\*"', '', @SW_HIDE)
- GUICtrlSetData($StatusBar, '')
- GUICtrlSetState($Button, $GUI_ENABLE)
- EndFunc
- Func __GetVerDownloadUnpackCopyNew()
- Local $bGetInfo, $sGetInfo, $VerInfo, $sVer, $sDateInfo, $sDate, $aArray, $i, $iDate, $inirsoftfiles, $iniFile, $sErr = ''
- GUICtrlSetState($Button, $GUI_DISABLE)
- GUICtrlSetData($StatusBar, 'Проверка версии...')
- $bGetInfo = InetRead('http://launcher.nirsoft.net/download.html', 1 + 16)
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Сайт недоступен.')
- Exit
- EndIf
- InetClose($bGetInfo)
- $sGetInfo = BinaryToString($bGetInfo)
- $VerInfo = StringRegExp($sGetInfo, 'nirsoft_package_[0-9\.]+\.zip', 1)
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Нет совпадений с "nirsoft_package_[0-9\.]+\.zip" или неправильный шаблон.')
- Exit
- EndIf
- If IsArray($VerInfo) Then
- $sVer = StringRegExpReplace($VerInfo[0], "(nirsoft_package_)([0-9\.]+)(\.zip)", '\2')
- Else
- MsgBox(4096, 'NirSoftUpdate.au3', 'Неизвестная ошибка, проверьте скрипт.')
- EndIf
- $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)
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Не найдена информация о версии')
- Exit
- EndIf
- If IsArray($sDateInfo) Then
- $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')
- Local $aArray[13]
- $aArray[0] = '12'
- $aArray[1] = 'January'
- $aArray[2] = 'February'
- $aArray[3] = 'March'
- $aArray[4] = 'April'
- $aArray[5] = 'May'
- $aArray[6] = 'June'
- $aArray[7] = 'July'
- $aArray[8] = 'August'
- $aArray[9] = 'September'
- $aArray[10] = 'October'
- $aArray[11] = 'November'
- $aArray[12] = 'December'
- For $i = 1 To $aArray[0]
- $iDate = ''
- If StringLen($i) = 1 Then
- $iDate = StringReplace($sDate, $aArray[$i], '0' & $i, 0, 0)
- If @extended = 1 Then ExitLoop
- Else
- $iDate = StringReplace($sDate, $aArray[$i], $i, 0, 0)
- If @extended = 1 Then ExitLoop
- EndIf
- Next
- $sDate = StringRegExpReplace($iDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '\1-\2-\3 \4:\5:\6')
- Else
- MsgBox(4096, 'NirSoftUpdate.au3', 'Неизвестная ошибка, проверьте скрипт.')
- EndIf
- GUICtrlSetData($StatusBar, '')
- GUICtrlSetState($Button, $GUI_ENABLE)
- Switch MsgBox(4 + 4096, 'NirSoftUpdate.au3', 'Текущая версия: ' & @TAB & $sVerC & ' (' & $sDateC & ')' & @CRLF & 'На сервере: ' & @TAB & $sVer & ' (' & $sDate & ')' & @CRLF & @CRLF & 'Обновляемся?')
- Case 6
- DirCreate($sTemp & '\nirsoft')
- GUICtrlSetState($Button, $GUI_DISABLE)
- GUICtrlSetData($StatusBar, 'Загрузка новой версии...')
- #cs
- $hNirSoft_package = InetGet('http://download.nirsoft.net/' & $VerInfo[0], $sTemp & '\nirsoft\nirsoft_package.zip', 1)
- If @error Then
- $hNirSoft_package = InetGet('http://download2.nirsoft.net/' & $VerInfo[0], $sTemp & '\nirsoft\' & $VerInfo[0], 1)
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Файл ' & $VerInfo[0] & ' недоступен.')
- InetClose($hNirSoft_package)
- Exit
- EndIf
- EndIf
- InetClose($hNirSoft_package)
- $hNirSoft_package_russian = InetGet('http://download.nirsoft.net/nirsoft_package_russian.zip', $sTemp & '\nirsoft\nirsoft_package_russian.zip', 1)
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Файл nirsoft_package_russian.zip недоступен.')
- Exit
- EndIf
- InetClose($hNirSoft_package_russian)
- $hNirSoft_add1 = InetGet('http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz', $sTemp & '\nirsoft\GeoLiteCity.dat.gz', 1)
- InetClose($hNirSoft_add1)
- $hNirSoft_add2 = InetGet('http://standards.ieee.org/develop/regauth/oui/oui.txt', $sTemp & '\nirsoft\oui.txt', 1)
- InetClose($hNirSoft_add2)
- $hNirSoft_add3 = InetGet('http://www.linux-usb.org/usb.ids', $sTemp & '\nirsoft\usb.ids', 1)
- InetClose($hNirSoft_add3)
- $hNirSoft_add4 = InetGet('http://www.nirsoft.net/main.css', $sTemp & '\nirsoft\main.css', 1)
- InetClose($hNirSoft_add4)
- $hNirSoft_add5 = InetGet('http://www.nirsoft.net/utils/nircmd.html', $sTemp & '\nirsoft\nircmd.html', 1)
- InetClose($hNirSoft_add5)
- $hNirSoft_add6 = InetGet('http://www.nirsoft.net/utils/nircmd2.html', $sTemp & '\nirsoft\nircmd2.html', 1)
- InetClose($hNirSoft_add6)
- #ce
- FileChangeDir($sTemp & '\nirsoft')
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet --referer=http://launcher.nirsoft.net/ http://download.nirsoft.net/' & $VerInfo[0], '', @SW_HIDE)
- 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)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://standards-oui.ieee.org/oui/oui.txt', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.linux-usb.org/usb.ids', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/whois-servers.txt', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/main.css', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/utils/nircmd.html', '', @SW_HIDE)
- Run('"' & $COMMANDER_PATH & '\Utilities\Wget\wget.exe" -N --background --quiet http://www.nirsoft.net/utils/nircmd2.html', '', @SW_HIDE)
- While ProcessExists('wget.exe')
- Sleep(1000)
- WEnd
- $inirsoftfiles = DirGetSize($sTemp & '\nirsoft', 1)
- If $inirsoftfiles[1] < 9 Then
- If Not FileExists($sTemp & '\nirsoft\main.css') Then $sErr &= @TAB & 'main.css' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\GeoLiteCity.dat.gz') Then $sErr &= @TAB & 'GeoLiteCity.dat.gz' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\nircmd.html') Then $sErr &= @TAB & 'nircmd.html' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\nircmd2.html') Then $sErr &= @TAB & 'nircmd2.html' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\usb.ids') Then $sErr &= @TAB & 'usb.ids' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\oui.txt') Then $sErr &= @TAB & 'oui.txt' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\whois-servers.txt') Then $sErr &= @TAB & 'whois-servers.txt' & @CRLF
- If Not FileExists($sTemp & '\nirsoft\' & $VerInfo[0]) Then $sErr &= @TAB & $VerInfo[0] & @CRLF
- If Not FileExists($sTemp & '\nirsoft\nirsoft_package_russian.zip') Then $sErr &= @TAB & 'nirsoft_package_russian.zip' & @CRLF
- If MsgBox(4 + 48 + 4096, 'NirSoftUpdate.au3', 'Произошла какая-то ошибка, скачались не все файлы!' & @CRLF & _
- 'Отсутствуют:' & @CRLF & $sErr & @CRLF & 'Необходимы nirsoft_package_*.zip и nirsoft_package_russian.zip, продолжаем?') = 7 Then
- FileSetAttrib('"' & $sTemp & '\nirsoft"', '-RASHNOT', 1)
- DirRemove($sTemp & '\nirsoft', 1)
- Exit
- EndIf
- EndIf
- FileChangeDir(@ScriptDir)
- Case 7
- Exit
- EndSwitch
- __Backup()
- GUICtrlSetData($StatusBar, 'Обновление файлов...')
- RunWait('"' & $COMMANDER_PATH & '\Plugins\wcx\Total7zip\7z.exe" x "' & $sTemp & '\nirsoft\' & $VerInfo[0] & '" -o"' & $sTemp & '\nirsoft\nirsoft_package"', $sTemp & '\nirsoft', @SW_HIDE)
- 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)
- ;x86
- $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x86')
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
- Else
- For $i = 1 To $iniFile[0][0]
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\' & $iniFile[$i][0] & '.exe', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '.exe', 1)
- Next
- EndIf
- ;x64
- $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x64')
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
- Else
- For $i = 1 To $iniFile[0][0]
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\' & $iniFile[$i][0] & '.exe', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '-x64.exe', 1)
- Next
- EndIf
- ;chm
- $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'chm')
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
- Else
- For $i = 1 To $iniFile[0][0]
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\' & $iniFile[$i][0], @ScriptDir & '\NirSoft\help\' & $iniFile[$i][1], 1)
- Next
- EndIf
- ;x86lang
- $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x86lang')
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
- Else
- For $i = 1 To $iniFile[0][0]
- FileCopy($sTemp & '\nirsoft\nirsoft_package_russian\' & $iniFile[$i][0], @ScriptDir & '\NirSoft\' & $iniFile[$i][1], 1)
- Next
- EndIf
- ;x64lang
- $iniFile = IniReadSection(@ScriptDir & '\NirSoftUpdate.ini', 'x64lang')
- If @error Then
- MsgBox(4096, 'NirSoftUpdate.au3', 'Произошла ошибка, возможно ini-файл пуст.')
- Else
- For $i = 1 To $iniFile[0][0]
- FileCopy($sTemp & '\nirsoft\nirsoft_package_russian\' & $iniFile[$i][0] & '_lng.ini', @ScriptDir & '\NirSoft\' & $iniFile[$i][1] & '-x64_lng.ini', 1)
- Next
- EndIf
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\nircmd.exe', @ScriptDir & '\NirSoft\x86\nircmd.exe', 1)
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\nircmdc.exe', @ScriptDir & '\NirSoft\x86\nircmdc.exe', 1)
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\nircmd.exe', @ScriptDir & '\NirSoft\x64\nircmd.exe', 1)
- FileCopy($sTemp & '\nirsoft\nirsoft_package\NirSoft\x64\nircmdc.exe', @ScriptDir & '\NirSoft\x64\nircmdc.exe', 1)
- FileCopy($sTemp & '\nirsoft\GeoLiteCity.dat.gz', @ScriptDir & '\NirSoft\GeoLiteCity.dat.gz', 1)
- FileCopy($sTemp & '\nirsoft\oui.txt', @ScriptDir & '\NirSoft\oui.txt', 1)
- FileCopy($sTemp & '\nirsoft\usb.ids', @ScriptDir & '\NirSoft\usb.ids', 1)
- FileCopy($sTemp & '\nirsoft\whois-servers.txt', @ScriptDir & '\NirSoft\whois-servers.txt', 1)
- ;help
- If FileExists($sTemp & '\nirsoft\nircmd.html') Then
- $hFile = FileOpen($sTemp & '\nirsoft\nircmd.html', 0 + 128)
- $sChars = FileRead($hFile)
- FileClose($hFile)
- $sChars = StringReplace($sChars, '<link rel="stylesheet" href="../main.css">', '<link rel="stylesheet" href="main.css">')
- $hFile = FileOpen($sTemp & '\nirsoft\nircmd.html', 2 + 128)
- FileWrite($hFile, $sChars)
- FileClose($hFile)
- FileCopy($sTemp & '\nirsoft\nircmd.html', @ScriptDir & '\NirSoft\help\NirCmd Description.html', 1)
- FileCopy($sTemp & '\nirsoft\main.css', @ScriptDir & '\NirSoft\help\main.css', 1)
- EndIF
- If FileExists($sTemp & '\nirsoft\nircmd2.html') Then
- $hFile = FileOpen($sTemp & '\nirsoft\nircmd2.html', 0 + 128)
- $sChars = FileRead($hFile)
- FileClose($hFile)
- $sChars = StringReplace($sChars, '<link rel="stylesheet" href="../main.css">', '<link rel="stylesheet" href="main.css">')
- $hFile = FileOpen($sTemp & '\nirsoft\nircmd2.html', 2 + 128)
- FileWrite($hFile, $sChars)
- FileClose($hFile)
- FileCopy($sTemp & '\nirsoft\nircmd2.html', @ScriptDir & '\NirSoft\help\NirCmd Full Help File.html', 1)
- EndIF
- FileSetAttrib('"' & $sTemp & '\nirsoft"', '-RASHNOT', 1)
- DirRemove($sTemp & '\nirsoft', 1)
- GUICtrlSetData($StatusBar, '')
- GUICtrlSetState($Button, $GUI_ENABLE)
- IniWrite(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentVersion', $sVer)
- IniWrite(@ScriptDir & '\NirSoftUpdate.ini', 'Main', 'CurrentDate', $sDate)
- __Backup()
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement