@echo off rem ================================================================================ for %%a in ("%~dp0\.") do set "SnPatchVersion=%%~nxa" rem ================================================================================ rem ВНИМАНИЕ!!! Текст сообщений для вывода в файл сделан в кодировке CP1251! rem ================================================================================ rem Сохраняем текущую кодовую страницу for /f "tokens=2 delims=:" %%i in ('chcp') do (set codepage_old=%%i) set codepage_old=%codepage_old:~1,9% rem ================================================================================ rem Проверка на наличие прав администратора if '%1'=='ELEV' (shift /1 & goto Install) >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if %errorlevel% neq 0 ( goto Elevate ) :Install rem ================================================================================ rem При наличии параметра это должен быть каталог для логов устаноки патча set log_dir=%~1 if ^"%log_dir%^" neq "" ( set fin=%log_dir:~-1% if "%fin%" neq "\" (set log_dir=%log_dir%\) ) rem ================================================================================ rem Получение путей rem Путь для сервера безопасности reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v SecurityServerDir > nul 2> nul if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яюыєўшЄ№ яєЄ№ єёЄрэютъш яЁюфєъЄр" ) else ( call :CheckStatus "[ОШИБКА] Не удалось получить путь установки продукта" ) FOR /F "usebackq tokens=2,* skip=2" %%L IN ( `reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v SecurityServerDir` ) DO SET serverpath=%%M if %serverpath:~-1% EQU \ set serverpath=%serverpath:~0,-1% rem Пути системных файлов set Sys32=%systemroot%\System32 set SysWOW=%systemroot%\SysWOW64 rem Путь драйверов rem set SysDrv=%systemroot%\System32\drivers rem ================================================================================ rem Основная работа по установке патча rem Операция в зависимости от разрядности if "%PROCESSOR_ARCHITECTURE%"=="x86" ( call :PatchX86 ) else ( call :PatchX64 ) rem ================================================================================ if "%log_dir%" neq "" ( chcp 1251 >nul 2>&1 echo ╧рЄў єёЄрэютыхэ єёях°эю > "%log_dir%success.%computername%.%userdomain%.patch_%SnPatchVersion%.log" chcp %codepage_old% >nul 2>&1 ) else ( color 0A echo Патч установлен успешно pause ) exit /b rem ================================================================================ :PatchX64 rem Замена файла с сохранением старой версии Setlocal EnableDelayedExpansion call :GetVersion "%serverpath%\LacusActivities.dll" Setlocal DisableDelayedExpansion ren "%serverpath%\LacusActivities.dll" "LacusActivities.dll%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы LacusActivities.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл LacusActivities.dll" ) copy "%~dp0Module\x64\LacusActivities.dll" "%serverpath%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы LacusActivities.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл LacusActivities.dll" ) ren "%serverpath%\en-US\LacusActivities.dll.mui" "LacusActivities.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы en-US\LacusActivities.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл en-US\LacusActivities.dll.mui" ) copy "%~dp0Module\x64\en-US\LacusActivities.dll.mui" "%serverpath%\en-US" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы en-US\LacusActivities.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл en-US\LacusActivities.dll.mui" ) ren "%serverpath%\ru-RU\LacusActivities.dll.mui" "LacusActivities.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы ru-RU\LacusActivities.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл ru-RU\LacusActivities.dll.mui" ) copy "%~dp0Module\x64\ru-RU\LacusActivities.dll.mui" "%serverpath%\ru-RU" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы ru-RU\LacusActivities.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл ru-RU\LacusActivities.dll.mui" ) rem Замена файла с сохранением старой версии Setlocal EnableDelayedExpansion call :GetVersion "%serverpath%\LacusFramework.dll" Setlocal DisableDelayedExpansion ren "%serverpath%\LacusFramework.dll" "LacusFramework.dll%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы LacusFramework.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл LacusFramework.dll" ) copy "%~dp0Module\x64\LacusFramework.dll" "%serverpath%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы LacusFramework.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл LacusFramework.dll" ) ren "%serverpath%\en-US\LacusFramework.dll.mui" "LacusFramework.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы en-US\LacusFramework.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл en-US\LacusFramework.dll.mui" ) copy "%~dp0Module\x64\en-US\LacusFramework.dll.mui" "%serverpath%\en-US" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы en-US\LacusFramework.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл en-US\LacusFramework.dll.mui" ) ren "%serverpath%\ru-RU\LacusFramework.dll.mui" "LacusFramework.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы ru-RU\LacusFramework.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл ru-RU\LacusFramework.dll.mui" ) copy "%~dp0Module\x64\ru-RU\LacusFramework.dll.mui" "%serverpath%\ru-RU" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы ru-RU\LacusFramework.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл ru-RU\LacusFramework.dll.mui" ) rem Замена файла с сохранением старой версии Setlocal EnableDelayedExpansion call :GetVersion "%serverpath%\LacusRuntime.dll" Setlocal DisableDelayedExpansion ren "%serverpath%\LacusRuntime.dll" "LacusRuntime.dll%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы LacusRuntime.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл LacusRuntime.dll" ) copy "%~dp0Module\x64\LacusRuntime.dll" "%serverpath%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы LacusRuntime.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл LacusRuntime.dll" ) ren "%serverpath%\en-US\LacusRuntime.dll.mui" "LacusRuntime.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы en-US\LacusRuntime.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл en-US\LacusRuntime.dll.mui" ) copy "%~dp0Module\x64\en-US\LacusRuntime.dll.mui" "%serverpath%\en-US" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы en-US\LacusRuntime.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл en-US\LacusRuntime.dll.mui" ) ren "%serverpath%\ru-RU\LacusRuntime.dll.mui" "LacusRuntime.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы ru-RU\LacusRuntime.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл ru-RU\LacusRuntime.dll.mui" ) copy "%~dp0Module\x64\ru-RU\LacusRuntime.dll.mui" "%serverpath%\ru-RU" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы ru-RU\LacusRuntime.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл ru-RU\LacusRuntime.dll.mui" ) rem Замена файла с сохранением старой версии Setlocal EnableDelayedExpansion call :GetVersion "%serverpath%\LacusServices.dll" Setlocal DisableDelayedExpansion ren "%serverpath%\LacusServices.dll" "LacusServices.dll%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы LacusServices.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл LacusServices.dll" ) copy "%~dp0Module\x64\LacusServices.dll" "%serverpath%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы LacusServices.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл LacusServices.dll" ) ren "%serverpath%\en-US\LacusServices.dll.mui" "LacusServices.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы en-US\LacusServices.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл en-US\LacusServices.dll.mui" ) copy "%~dp0Module\x64\en-US\LacusServices.dll.mui" "%serverpath%\en-US" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы en-US\LacusServices.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл en-US\LacusServices.dll.mui" ) ren "%serverpath%\ru-RU\LacusServices.dll.mui" "LacusServices.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы ru-RU\LacusServices.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл ru-RU\LacusServices.dll.mui" ) copy "%~dp0Module\x64\ru-RU\LacusServices.dll.mui" "%serverpath%\ru-RU" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы ru-RU\LacusServices.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл ru-RU\LacusServices.dll.mui" ) rem Замена файла с сохранением старой версии Setlocal EnableDelayedExpansion call :GetVersion "%serverpath%\OmsServer.dll" Setlocal DisableDelayedExpansion ren "%serverpath%\OmsServer.dll" "OmsServer.dll%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы OmsServer.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл OmsServer.dll" ) copy "%~dp0Module\x64\OmsServer.dll" "%serverpath%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы OmsServer.dll" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл OmsServer.dll" ) ren "%serverpath%\en-US\OmsServer.dll.mui" "OmsServer.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы en-US\OmsServer.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл en-US\OmsServer.dll.mui" ) copy "%~dp0Module\x64\en-US\OmsServer.dll.mui" "%serverpath%\en-US" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы en-US\OmsServer.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл en-US\OmsServer.dll.mui" ) ren "%serverpath%\ru-RU\OmsServer.dll.mui" "OmsServer.dll.mui%file_old_version%" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ яхЁхшьхэютрЄ№ чрьхэ хь√щ Їрщы ru-RU\OmsServer.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось переименовать заменяемый файл ru-RU\OmsServer.dll.mui" ) copy "%~dp0Module\x64\ru-RU\OmsServer.dll.mui" "%serverpath%\ru-RU" if "%log_dir%" neq "" ( call :CheckStatus "[╬╪╚┴╩└] ═х єфрыюё№ ёъюяшЁютрЄ№ юсэюты╕ээ√щ Їрщы ru-RU\OmsServer.dll.mui" ) else ( call :CheckStatus "[ОШИБКА] Не удалось скопировать обновлённый файл ru-RU\OmsServer.dll.mui" ) exit /b rem ================================================================================ :GetVersion set file_old_version=_ set file_path=%1 set file_double_path=!file_path:\\=\! set file_double_path=!file_double_path:\=\\! set file_full_ver= wmic datafile where name^=!file_double_path! get Version /value >nul 2>&1 for /F "delims=" %%a in ('wmic datafile where name^=!file_double_path! get Version /value') do ( set file_full_ver=!file_full_ver!%%a ) set file_ver= for /F "tokens=3 delims=.," %%a in ("!file_full_ver!") do set file_ver=!file_ver!_%%a for /F "tokens=4 delims=.," %%a in ("!file_full_ver!") do set file_ver=!file_ver!_%%a set file_old_version=!file_ver! exit /b rem ================================================================================ :CheckStatus if %errorlevel% neq 0 ( if "%log_dir%" neq "" ( chcp 1251 >nul 2>&1 echo %~1 > "%log_dir%fail.%computername%.%userdomain%.patch_%SnPatchVersion%.log" chcp %codepage_old% >nul 2>&1 ) else ( color 0C echo. echo %~1 echo. pause ) exit ) exit /b rem ================================================================================ rem Запуск скрипта с повышением (UAC) :Elevate set "vbsGetPrivileges=%temp%\SNgetPriv_%~n0.vbs" echo. echo ************************************** echo Running as administrator echo ************************************** echo Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%" echo args = "ELEV " >> "%vbsGetPrivileges%" echo For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%" echo args = args ^& strArg ^& " " >> "%vbsGetPrivileges%" echo Next >> "%vbsGetPrivileges%" echo args = "/c """ + "%~f0" + """ " + args >> "%vbsGetPrivileges%" echo UAC.ShellExecute "%SystemRoot%\system32\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%" rem echo UAC.ShellExecute "%~f0", args, "", "runas", 1 >> "%vbsGetPrivileges%" "%SystemRoot%\system32\WScript.exe" "%vbsGetPrivileges%" %* exit /b