Намучавшись с настройкой
надёжных обновлений Классика с локального зеркала (т.е. с отлавливанием "Ошибки 537", или как её там, а также попытками настроить обновления с локального вёб-сервера) и желая по максимуму использовать штатный функционал (т.е. без костылей с архивацией папки фейлсейф и т.п.) решил обновлять Авиру с локальных "зеркал второго уровня", которые будут создаваться на основе "обычного" общего зеркала в локалке.
Настройка делается предлагаемым батником
setlocalupd.cmd. Он расчитан на расположение внутри каталога зеркала
update из моего набора
Avira-PE Mirrorer (в шапке). В результате на каждой машине каждые два часа, начиная со случайного времени между полуночью и 02:00, с помощью Виндового шедулера сначала вызывается программа от bmu с соответствующим образом настроенным ini-шником, а после её успешного завершения "пинается" штатное Авировское обновление. Локальное "зеркало зеркала" создаётся в папке Винды.
Подразумевается, что:
1) доступ к основному зеркалу осуществляется по файловому пути или UNC
2) батник лежит в зеркале и запускается прямо оттуда, где лежит
3) запустивший батник имеет админские или близкие права (может писать в каталог Винды)
4) этот же юзер имеет доступ к серверу и шаре с зеркалом
Задача создаётся и запускается под именем запустившего батник-конфигуратор юзера, и для доступа к зеркалу в сети используются его права. Имя сервера явно прописано в файле, имя юзера подставляется при работе конфигуратора, пароль запрашивается
upd: при создании задачи.
Архив того, что нужно
добавить в папку
update Avira-PE Mirrorer-а.
Для тех, кто хочет что-то по-своему, [more=код самого setlocalupd.cmd:]
Код: ::==v9.11=============================================================
:: ONLY for a v9 and may b next
::====================================================================
@echo off
SETLOCAL ENABLEEXTENSIONS
chcp 866 > nul
SET DP0=%~dp0
SET DP0=%DP0:~0,-1%
set Server=server
SET "reg=%DP0%\reg.exe"
SET "task=%DP0%\schtasks.exe"
SET "iniedit=%DP0%\inifile.exe"
set LocalMirr=%WinDir%\AVIRA\update
SET "RegKey=HKLM\SOFTWARE\Avira\AntiVir Desktop"
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: show a big fat warning
@echo. & @echo. & @echo.
@echo В Н И М А Н И Е !
@echo. & @echo.
@echo Отключи самозащиту настроек Avira!
@echo.
@echo - Открой настройки Avira
@echo - Включи флажок "Экспертный режим"
@echo - Перейди в "Общее" - "Безопасность"
@echo - Отключи "Защитить процессы..."
@echo - Отключи "Защитить от манипуляций..."
@echo - Сохрани настройки кнопкой "Применить"
@echo - Оставь окно настроек пока открытым
@echo. & @echo. & @pause & @echo.
@echo. & @echo Going forward...
:: ensure we are not old, check for a /v9/ registry presence
"%reg%" query "%RegKey%" /v Path > nul 2>&1 ^
|| (@echo. & @echo Can NOT find a value in the Registry! ^
& @echo Is Avira v9 installed? & @echo. & @pause & exit)
:: get and clean a bin path (delim is a plain ascii "Tab")
FOR /f "skip=4 tokens=3* delims= " %%V in (
'^("%reg%" query "%RegKey%" /v Path^)'
) do SET AppDir=%%V
SET AppDir=%AppDir:~0,-1%
@echo. & @echo Avira in: & @echo %AppDir%
:: get and clean a config path (delim is a plain ascii Tab)
FOR /f "skip=4 tokens=3* delims= " %%V in (
'^("%reg%" query "%RegKey%" /v AppDataDirectory^)'
) do SET DataDir=%%V
SET DataDir=%DataDir:~0,-1%
SET ConfigDir=%DataDir%\CONFIG
SET AviraIni=%ConfigDir%\AVWIN.INI
@echo. & @echo Avira Data in: & @echo %DataDir%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo Prepare a local mirror...
@echo. & @echo ...make dir...
mkdir %LocalMirr% > nul
@echo. & @echo ...copy files...
(xcopy /v /z /y /r /i "%DP0%\gzip.exe" %LocalMirr%) ^
&& (xcopy /v /z /y /r /i "%DP0%\hidcon.exe" %LocalMirr%) ^
&& (xcopy /v /z /y /r /i "%DP0%\avimicr.*" %LocalMirr%) ^
|| (@echo. & @echo Can NOT copy mirrorer locally! & @echo. & @pause & exit)
@echo. & @echo ...edit AVIMICR.INI...
:: set avimicr params: mirror src and detailed logging
"%iniedit%" %LocalMirr%\avimicr.ini [general] servers=file://%DP0%
"%iniedit%" %LocalMirr%\avimicr.ini [general] brief_log=1
@echo. & @echo Initialize local mirror...
pushd %LocalMirr%
avimicr.exe ^
&& (@echo. & @echo Going forward... & popd) ^
|| (@echo. & @echo Mirror init ended with some ERRORS! ^
& @echo Going further anyway & @echo. & @pause)
:: we've already seen a mirrorer log so now set to min logging
"%iniedit%" %LocalMirr%\avimicr.ini [general] brief_log=0
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo Tuning Avira updater...
:: stop sheduler to guarantee the use of a new/edited jobs
net stop AntiVirSchedulerService > nul
@echo. & @echo ...restore original jobs...
:: restore the original (got from the lastest installer) .AVJ files
xcopy /v /z /y /r /i "%DP0%\*.avj" "%DataDir%\JOBS"
:: tuning Avira update jobs
:: Avira makes a regular updates only for the scanjob.avj and updjob.avj files
:: starting update via tray context uses a startupd.avj
::copy /y "%DataDir%\JOBS\startupd.avj" "%DataDir%\saved.startupd.avj" > nul
"%iniedit%" "%DataDir%\JOBS\startupd.avj" [CONFIG] Data=/DM="1" "/NOMESSAGEBOX"
"%iniedit%" "%DataDir%\JOBS\startupd.avj" [CONFIG] GuiMode=1
"%iniedit%" "%DataDir%\JOBS\startupd.avj" [CONFIG] Visible=0
@echo. & @echo ...turn OFF standard update...
:: turning off standard (24hrs) update
"%iniedit%" "%DataDir%\JOBS\updjob.avj" [CONFIG] JobEnabled=0
:: changing update source
"%iniedit%" "%AviraIni%" [UPDATE] DownloadLocation=0
"%iniedit%" "%AviraIni%" [UPDATE] ShareDownloadUrl=%LocalMirr%
net start AntiVirSchedulerService > nul
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo Prepare a sheduled task...
@echo. & @echo ...delete old task...
:: cleaning an old task
"%task%" /delete /f /tn Avira-Up > nul 2>&1
@echo. & @echo ...make a batch-file...
:: make a localsystem-specific batch:
:: a) the way it called from an UI
echo net use \\%Server%\ipc$ ^|^| exit 1 > "%LocalMirr%\localupd.cmd"
echo avimicr.exe ^|^| exit 2 >> "%LocalMirr%\localupd.cmd"
echo "%AppDir%\avcenter.exe" /STARTUPDATE ^|^| exit 3 >> "%LocalMirr%\localupd.cmd"
:: b) the way it runs after UI call
::echo net use \\%Server%\ipc$ ^|^| exit 1 > "%LocalMirr%\localupd.cmd"
::echo avimicr.exe ^|^| exit 2 >> "%LocalMirr%\localupd.cmd"
::"%AppDir%\update.exe" /DM="1") ^|^| exit 3 >> "%LocalMirr%\localupd.cmd"
@echo. & @echo ...set a task account...
@echo. & @echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: create new task at random 00:00-02:00
set /a HR=%RANDOM% %% 2 & set /a MH=%RANDOM% %% 6 & set /a ML=%RANDOM% %% 10
"%task%" /create /ru %UserName% /rp /sc HOURLY /MO 2 /st 0%HR%:%MH%%ML%:%MH%%ML% ^
/tn Avira-Up /tr "\"%LocalMirr%\hidcon.exe\" localupd.cmd"
@echo. & @echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo Launching our very first /configured/ update...
"%task%" /run /tn Avira-Up > nul
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo. & @echo. & @echo.
@echo С Д Е Л А Н О !
@echo. & @echo.
@echo Проверь вывод консоли на ошибки.
@echo. & @echo.
@echo Если результат приемлем - включи самозащиту Avira:
@echo.
@echo - Перейди в окно настроек Avira
@echo - Включи "Защитить процессы..."
@echo - Если дальнейшее управление настройками
@echo с помощью CMD-файлов не планируется, то
@echo включи "Защитить от манипуляций..."
@echo - Сохрани настройки кнопкой "ОК"
@echo. & @echo. & @pause