Update.bat
| |
lostzombie | Дата: Пятница, 27.04.2012, 23:36 | Сообщение # 1 |
Лейтенант
Зареген: 16.12.2011
Всего сообщений: 16
| Обсуждаем скрипты обновления и все, что связано с ними.
Методика закачки\обновления большинство ПО схожа, поэтому главное разработать базовый шаблон.
Для примера закачки по прямой ссылке(самый простой случай для начала), выкладываю, скрипт обновления Process Explorer.
Code @echo off SETLOCAL enabledelayedexpansion
set name=Process Explorer set link=http://download.sysinternals.com/files/ProcessExplorer.zip set fname=ProcessExplorer.zip set referer=http://technet.microsoft.com/en-us/sysinternals/bb896653 set progname=procexp.exe
if exist "%~dp0log.txt" del /q "%~dp0log.txt" if exist "%~dp0size_test.txt" move /y "%~dp0size_test.txt" "%~dp0size.txt"
echo %time:~0,-3% Обновление %name% echo Проверка необходимости обновления...
%~dp0..\..\scripts\aria2c.exe -q --dry-run=true -llog.txt --deferred-input=true --async-dns=false -V -c ^ --allow-overwrite=true --connect-timeout=30 --max-tries=5 --max-file-not-found=5 --retry-wait=5 ^ --user-agent="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0" --check-certificate=false --http-accept-gzip=true ^ --referer=%referer% %link%
set error=!ERRORLEVEL! if not %error%==0 ( call %~dp0..\..\scripts\err.bat exit /b %error% ) else ( type "%~dp0log.txt" | find /i "Content-Length" >"%~dp0size_test.txt" DEL /f /q "%~dp0log.txt" if exist "%~dp0size.txt" ( fc /C /W "%~dp0size_test.txt" "%~dp0size.txt">nul if !ERRORLEVEL!==0 ( del /f /q "%~dp0size_test.txt" if not exist "%~dp0%fname%" ( echo Обновление не требуется exit /b 0 ) else ( echo Докачка %fname% goto :download ) ) else ( "%~dp0size_test.txt" move /y "%~dp0size_test.txt" "%~dp0size.txt" if exist "%~dp0%fname%" del /f /q "%~dp0%fname%" ) ) echo Закачка %fname% :download %~dp0..\..\scripts\aria2c.exe --summary-interval=0 --deferred-input=true --async-dns=false -V -c --always-resume=false --max-resume-failure-tries=5 ^ --allow-overwrite=true --file-allocation=none --connect-timeout=60 --max-tries=5 --max-file-not-found=5 --retry-wait=5 ^ --user-agent="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0" --check-certificate=false --http-accept-gzip=true ^ --referer=%referer% %link% set error=!ERRORLEVEL! if not %error%==0 ( call %~dp0..\..\scripts\err.bat exit /b %error% ) else ( if exist %~dp0%fname% ( echo Распаковка %fname% ... call :unpack>nul call :filework>nul ) else ( echo Ошибка обновления. Возможно поменялась ссылка на обновление. if exist "%~dp0size_test.txt" del /f /q "%~dp0size_test.txt" if exist "%~dp0size.txt" del /f /q "%~dp0size.txt" exit /b 31 ) ) ) if exist "%~dp0%fname%" del /f /q "%~dp0%fname%" echo Обновление %name% завершено. exit /b 0
:unpack taskkill /f /t /fi "STATUS eq RUNNING" /im %progname% "%~dp0..\SFX Tool\7z.exe" x "%~dp0%fname%" -y -o"%~dp0" if not !ERRORLEVEL!==0 ( echo Ошибка распаковки. exit /b 32 ) goto :eof :filework del /f /q "%~dp0procexp.chm" del /f /q "%~dp0Eula.txt"
для закачки используется aria, ссылки: http://aria2.sourceforge.net/ http://aria2.sourceforge.net/manual/ru/html/
которая кстати отлично качает с sourceforge.net по ссылкам вида http://sourceforge.net/projects/xxxxx/files/latest/download,
критика и предложения приветствуются, после обкатки скрипта на его базе можно начинать делать обновления для остального ПО.
Для изменения скрипта под другие программы с прямыми ссылками, достаточно два изменения 1. Вначале раздел с set, заменить ссылки, названия, имена. 2. Изменить процедуры unpack и fileworks в конце.
Вроде бы учел все возможноые ошибки, закачки распаковки, коды завершения 0 - обновления удачно, 1-30 - ошибки закачки, 31 - Если качается что-то не то, ссылка поменялась, 32 - если закачано правильно, но все равно есть ошибки распаковки.
Также учел, если обновляемая программа запущена, процесс убивается, что бы не мешал распаковке.
Присутствует докачка, при непредвиденном завершении скрипта.
кто не в теме aria2c.exe и err.bat положить в папку scripts, Update.bat в папку с Process Explorer.
this game has no name....
Сообщение отредактировал lostzombie - Воскресенье, 29.04.2012, 16:36 |
|
| |
lostzombie | Дата: Понедельник, 30.04.2012, 00:09 | Сообщение # 2 |
Лейтенант
Зареген: 16.12.2011
Всего сообщений: 16
| пока народ занят подготовкой TCPU69, TCPU69+. выложу пример скрипта обновления с поиском, ссылки на скачку. Для примера взята AIDA64, повезло что файл ключа pkey.txt подходит для следующих версий. Code @echo off SETLOCAL enabledelayedexpansion
set "name=AIDA64" set "progname=aida64.exe" set "downlink=http://www.aida64.com/downloads/a64xe"
if exist "%~dp0log.txt" del /q /f "%~dp0log.txt" if exist "%~dp0size_test.txt" move /y "%~dp0size_test.txt" "%~dp0size.txt"
echo %time:~0,-3% Обновление %name%
echo Поиск ссылки...
call :findlink>nul if not "%error%"=="0" ( echo Ошибка. Ссылка не найдена exit /b 32 ) set "link=http://download.aida64.com/%fname%" echo %link% set "referer=http://www.aida64.com/downloads/%fname:~0,-4%zip"
echo Проверка необходимости обновления...
"%~dp0..\..\scripts\aria2c.exe" -q --dry-run=true -llog.txt --deferred-input=true --async-dns=false -V -c ^ --allow-overwrite=true --connect-timeout=30 --max-tries=5 --max-file-not-found=5 --retry-wait=5 ^ --user-agent="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0" --check-certificate=false --http-accept-gzip=true ^ --referer=%referer% %link%
set "error=!ERRORLEVEL!" if not "%error%"=="0" ( call "%~dp0..\..\scripts\err.bat" exit /b %error% ) else ( type "%~dp0log.txt" | find /i "Content-Length" >"%~dp0size_test.txt" DEL /f /q "%~dp0log.txt" if exist "%~dp0size.txt" ( fc /C /W "%~dp0size_test.txt" "%~dp0size.txt">nul if "!ERRORLEVEL!"=="0" ( del /f /q "%~dp0size_test.txt" if not exist "%~dp0%fname%" ( echo Обновление не требуется exit /b 0 ) else ( echo Докачка %fname% goto download ) ) else ( rem "%~dp0size_test.txt" move /y "%~dp0size_test.txt" "%~dp0size.txt" if exist "%~dp0%fname%" del /f /q "%~dp0%fname%" ) ) echo Закачка %fname% :download "%~dp0..\..\scripts\aria2c.exe" --summary-interval=0 --deferred-input=true --async-dns=false -V -c --always-resume=false --max-resume-failure-tries=5 ^ --allow-overwrite=true --file-allocation=none --connect-timeout=60 --max-tries=5 --max-file-not-found=5 --retry-wait=5 ^ --user-agent="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0" --check-certificate=false --http-accept-gzip=true ^ --referer=%referer% %link% set "error=!ERRORLEVEL!" if not "%error%"=="0" ( call "%~dp0..\..\scripts\err.bat" exit /b %error% ) else ( if exist "%~dp0%fname%" ( echo Распаковка %fname% ... call :unpack>nul call :filework>nul ) else ( echo Ошибка обновления. Возможно поменялась ссылка на обновление. if exist "%~dp0size_test.txt" del /f /q "%~dp0size_test.txt" if exist "%~dp0size.txt" del /f /q "%~dp0size.txt" exit /b 31 ) ) ) if exist "%~dp0%fname%" del /f /q "%~dp0%fname%" echo Обновление %name% завершено. if not exist "%~dp0pkey.txt" echo Предупреждение! Отсутствует файл лицензии. exit /b 0
:unpack taskkill /f /t /fi "STATUS eq RUNNING" /im %progname% "%~dp0..\SFX Tool\7z.exe" x "%~dp0%fname%" -y -o"%~dp0" if not !ERRORLEVEL!==0 ( echo Ошибка распаковки. exit /b 32 ) goto :eof :filework del /f /q "%~dp0aida64.chm" del /f /q "%~dp0license.txt" copy /y "%~dp0Language\lang_ru.txt" "%~dp0" rd /s /q "%~dp0Language" goto :eof :findlink "%~dp0..\..\scripts\aria2c.exe" -q --summary-interval=0 --deferred-input=true --async-dns=false -V -c --always-resume=false --max-resume-failure-tries=5 ^ --allow-overwrite=true --file-allocation=none --connect-timeout=60 --max-tries=5 --max-file-not-found=5 --retry-wait=5 ^ --user-agent="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0" --check-certificate=false --http-accept-gzip=true ^ %downlink% set "error=!ERRORLEVEL!" if "!error!"=="0" ( @findstr "[0-9][0-9][0-9]zip" "%~dp0a64xe" for /f "tokens=2 delims= " %%i in ('findstr "[0-9][0-9][0-9]zip" "%~dp0a64xe"') do set "fname=%%i" for /f "tokens=3 delims=/" %%i in ("!fname!") do set "fname=%%i" set "fname=!fname:~0,-4!.zip" del /f /q "%~dp0a64xe" ) exit /b основное отличие от примера выше, наличие процедуры findlink, добавлен код завершения 33 - ссылка на обновление не найдена (единственное надо добавить код, если имя файла по маске не найдено на странице обновления).
по прежнему жду коментариев volodia_k и отмашки НАЗАРЕТ, если шаблоны обновлений имеют преимущества над используемыми, то к 60 версии, попробую подготовить скрипты под весь софт. НАЗАРЕТ, можно сделать lite, версию пака, в которой, по дефолту будет идти только то что нельзя скачать, остальное будет закачиваться, делать цветную иконку, плюс прописыватся в ini, choise editor'a, и других местах где прописано.
this game has no name....
Сообщение отредактировал lostzombie - Понедельник, 30.04.2012, 02:41 |
|
| |
HA3APET | Дата: Понедельник, 30.04.2012, 01:11 | Сообщение # 3 |
Генералиссимус
Зареген: 15.03.2010
Всего сообщений: 693
| lostzombie, спасибо за старания и инициативу, посмотрю чуть позже, надо пока допилить 59 сборку.
|
|
| |
lostzombie | Дата: Понедельник, 30.04.2012, 01:15 | Сообщение # 4 |
Лейтенант
Зареген: 16.12.2011
Всего сообщений: 16
| HA3APET, без вопросов, я после создания темы раз десять скрипты допиливал и обновлял, так что время зря не тратим, удачи в обкатке 59ой
this game has no name....
|
|
| |
volodia_k | Дата: Понедельник, 30.04.2012, 02:09 | Сообщение # 5 |
Генерал-лейтенант
Зареген: 28.05.2010
Всего сообщений: 387
| lostzombie, я там в личку тебе письмо сбросил с пожеланиями...
|
|
Пользователь из города: Almaty | | |
| |
lostzombie | Дата: Понедельник, 30.04.2012, 02:37 | Сообщение # 6 |
Лейтенант
Зареген: 16.12.2011
Всего сообщений: 16
| volodia_k, чё так скромно, в личку, тему на то и создал, чтобы как минимум знать мнение тебя и назарета, а там ещё кто подпишется
про ковычки понял, учтём(поправил выложенный скрипт аиды от греха подальше), в принципе, я на ходу учусь пакетные файлы писать, не так давно, мои знания были ограничены хелпом командной строки
процетирую твоё сообщение... Quote Теперь по поводу использовании скрипта в сборке. Если оставить его в этом виде, то будет хлопотно поддерживать, так как он будет находиться в каждой папке с программой. При достаточном их количестве, даже сейчас, это проблематично. Например чтобы чтото поправить, нужно перекопать все папки со скриптом. Да и сам процесс настройки скрипта под прогу нужно упростить.
Короче. У меня предложение к тебе, как разработчику, уже очень неплохого продукта. 1. Сделать один унифицированный скрипт. 2. Он должен находиться например в папке Scripts 3. Файлы !Update.bat, лежащие в прогах, ссылаются на него передовая нужные параметры.
Тоесть в идеале файлик !Update.bat должен содержать пару строк, а все остальное должна делать твоя библиотека. Если рассматривать то что есть сейчас и вынести это в отдельную библиотеку, то уже можно охватить 50 процентов обновок сборки. Дальше можно будет уже углубляться в тонкости каждой проги, и делать нужные навесы.
Использование такой библиотеки сильно упростит жизнь разработчику пака.
я об этом думал, но как говорится не лезу вперед батьки в пекло, т.е. для начала, чтобы узнать все нюансы обновления каждой софтины, я всё же навояю !Update.bat, в том виде в котором они представлены выше, т.е. полный код для каждой программы, а при наличии полного набора батников, легче выделить максимально универсальную часть и реализовать мысли описанные тобой. Тем более когда переделываешь под каждую новую программу, обкатываеш базовый скрипт. Так что, если только к 61ой версии
к тому же пройдясь по всему софту основной сборки, можно классифицировать его по критерию обновляемости, например: скачиваемая, но давно не обновляется постоянная ссылка отсутствует обновляемая по прямой ссылке, имя файла в ссылке нет, либо неизменно от версии обновляемая по прямой ссылке, но ссылка зависит от версии обновляемая но ссылку нужно искать по маске.
аналогично с распаковкой, например аимп даже если скачаеш не распакуеш, нужно либо искать постоянную ссылку на портабл не от разработчика, либо autoit скрипт написать на инсталяцию в папку с тоталом, с подчисткой реестра.
this game has no name....
Сообщение отредактировал lostzombie - Понедельник, 30.04.2012, 02:57 |
|
| |
volodia_k | Дата: Понедельник, 30.04.2012, 15:58 | Сообщение # 7 |
Генерал-лейтенант
Зареген: 28.05.2010
Всего сообщений: 387
| Quote (lostzombie) я об этом думал, но как говорится не лезу вперед батьки в пекло, т.е. для начала, чтобы узнать все нюансы обновления каждой софтины, я всё же навояю !Update.bat, в том виде в котором они представлены выше, т.е. полный код для каждой программы, а при наличии полного набора батников, легче выделить максимально универсальную часть и реализовать мысли описанные тобой. Тем более когда переделываешь под каждую новую программу, обкатываеш базовый скрипт. Так что, если только к 61ой версии Возможно раньше я бы тоже пошел этим путем. Но так сказать с опытом, могу порекомендовать следующее: Существующий скрипт вынести в отдельную папку Scripts, как я писал выше. Модифицировать его под принятие параметров от внешнего вызова текущей программы (под которую он сейчас сделан) То есть оставить все как есть, только сразу разделить на модуль (в папке Scripts) и вызов модуля с параметрами из !Update.bat, лежащий в папке с прогой. Это будет главный важный шаг для создания централизованного модуля обновлений. (Он сэкономит тебе массу времени...) Далее, когда отладишь эту связку под текущую программу, можно будет переходить к другим. Ищешь проги с похожими запросами на обновки, увеличивая количество обновляемого софта твоей библиотекой. После уже обрабатываешь исключение из правила, выведенного изначально. Довес на обработку данного исключения добавит перечень обслуживаемого софта и т.д.
Лучше сразу идти путем, ведущим к тому что должно быть в итоге. Иначе потеря времени, сил и мотивации...
|
|
Пользователь из города: Almaty | | |
| |
lostzombie | Дата: Понедельник, 30.04.2012, 17:48 | Сообщение # 8 |
Лейтенант
Зареген: 16.12.2011
Всего сообщений: 16
| volodia_k, ну чтож убедил, попробую.
this game has no name....
|
|
| |
gobnait55 | Дата: Среда, 21.08.2013, 10:06 | Сообщение # 9 |
Рядовой
Зареген: 21.08.2013
Всего сообщений: 1
| Часто меняю наборы колонок и тыкать для этого мышкой просто неудобно а мне схема нравится, привык к ней ещё на4иная со сборок сэмлаб
testking 70-411 testking 70-411 Pass4sure pmi pmp certification Pass4sure pmi pmp certification
|
|
| |
YakovFrupt | Дата: Понедельник, 12.12.2016, 07:01 | Сообщение # 10 |
Рядовой
Зареген: 12.12.2016
Всего сообщений: 2
| На днях изучал контент сети, и неожиданно к своему удивлению заметил восхитительный вебсайт. Вот он: [url=https://avrora-trans.com]https://avrora-trans.com[/url] . Минуту назад осматривал контент инета, и неожиданно к своему удивлению обнаружил лучший сайт. Вот смотрите:
аврора анкета
|
|
| |
ArthurNeich | Дата: Понедельник, 06.02.2017, 04:18 | Сообщение # 11 |
Рядовой
Зареген: 02.02.2017
Всего сообщений: 1
| Click <a href=https://excellenthost.ru>girls ass in mirror</a> to talk to hot girls in your city!
<a href=https://excellenthost.ru>girls ass in mirror</a>
|
|
| |
|