Версия AutoIt: v3.3.4.0
Описание:
Скрипт из одной комманды, запустить Setup_XP.cmd
После этого происходит следующее:
Как это победить?
Примечания:
Описание:
Скрипт из одной комманды, запустить Setup_XP.cmd
Код:
Run("c:\WINDOWS\Temp\Ru\UnPack\Setup_XP.cmd")
@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
rem ---Считываем файлы конфигурации Set.txt, OS_ver.txt, Text_ru.txt(Text_en.txt) из папки Config---
for /F "tokens=*" %%s in (.\Config\Set.txt) do set %%s
for /F "tokens=*" %%s in (.\Config\OS_ver.txt) do set %%s
(if "%Chk_Lang%"=="Russian" set Chk_Lang3=%Chk_Lang1%)&(if "%Chk_Lang%"=="English" set Chk_Lang3=%Chk_Lang2%)
for /f "tokens=3" %%c in ('reg query "%detect_CP%" /v OEMCP^|findstr /I /C:"OEMCP"') do if "%%c"=="866" (set text_lang=Text_ru.txt) else (set text_lang=Text_en.txt)
for /F "tokens=*" %%s in (.\Config\%text_lang%) do set %%s
rem ---Задаем заголовок окна CMD---
Title %Title_Cmd%
rem ---Скрываем окно CMD по заголовку---
start /WAIT /MIN .\Tools\nircmd.exe win hide title "%Title_Cmd%"
%delay%
rem ---Вызываем процедуру проверки соответствия версии и языка операционной системы---
call :chk
rem ---Выводим информационное сообщение о начале установки обновлений поверх всех окон со звуковым оповещением---
start .\Tools\nircmd.exe infobox %Text_InfoBox_2% %Title_InfoBox%
start /WAIT /MIN .\Tools\nircmd.exe beep 1500 2000
start /WAIT /MIN .\Tools\nircmd.exe win settopmost title %Title_InfoBox% 1
rem ---Делаем запись даты и времени выполнения скрипта в журналы Installed_Updates.log и Detected_Updates.log---
echo Date of installation: %time:~,-6% %date%>>%SystemDrive%\Installed_Updates.log&echo Date of detection: %time:~,-6% %date%>>%SystemDrive%\Detected_Updates.log
echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log
rem ---Включаем отображение расширений файлов в проводнике (только если существует файл HideFileExt.reg в папке Tools)---
if exist .\Tools\HideFileExt.reg start /high /wait regedit /s .\Tools\HideFileExt.reg
rem ---Отключаем службу восстановления системы (только если существует файл DisableSR.reg в папке Tools)---
if exist .\Tools\DisableSR.reg (
start /high /wait regedit /s .\Tools\DisableSR.reg
start /high /wait sc stop srservice >nul
)
rem ---Вызываем процедуру установки Microsoft .Net Framework 3.5 SP1 Rus---
call :dotnetfx
rem ---Для каждой не пустой строки файла KB.txt из папки Config вызываем процедуру :KBInst---
for /F "tokens=1,* delims= " %%k in (.\Config\KB.txt) do call :KBInst "%%k" "%%l"
rem ---Если установлено обновление KB890830 создаем ярлык (меню Пуск->Программы) для исполняемого файла в папке заданной в файле Text_ru.txt (Text_en.txt)---
if exist "%WINDIR%\System32\MRT.exe" .\Tools\nircmd shortcut "%WINDIR%\System32\MRT.exe" "~$folder.common_programs$\%MRT_Group%" "Microsoft Removal Tool"
rem ---Вызываем процедуру удаления ярлыков Internet Explorer с рабочего стола и панели быстрого запуска---
call :IEclrlnk
rem ---Вызываем процедуру установки Windows Roots Update---
call :rootsupdate
rem ---Вызываем процедуру установки библиотек VC++ 2005 и VC++ 2008---
call :VC++
if exist .\KBxxxxxx\KB905474.exe if exist .\WGA\WGAUpdate.exe start /wait .\WGA\WGAUpdate.exe
rem ---Записываем по две пустые строки в журналы Installed_Updates.log и Detected_Updates.log---
echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log
rem ---Распаковываем утилиту nircmd.exe в папку %SystemRoot%\TEMP---
start /WAIT /MIN .\Tools\NirCmdInst.exe
rem ---После перезагрузки выводим информационное сообщение о полном окончании установки---
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v ReadyPreSP3 /t REG_SZ /d "%SystemRoot%\TEMP\nircmd.exe infobox \"%Text_InfoBox_4%\" \%Title_InfoBox:~,-1%\"" /f >nul
rem ---Проверяем значение ключа принудительной перезагрузки после окончания установки обновлений---
if %ForceReboot%==Yes ( rem ---Выводим информационное сообщение об окончании установки обновлений и предстоящей перезагрузке со звуковым оповещением---
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe win close title %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe infobox %Text_InfoBox_3% %Title_InfoBox%
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe beep 200 800
rem ---Выполняем перезагрузку после 10 секундной задержки---
start /B %SystemRoot%\TEMP\nircmd.exe cmdwait 10000 exitwin reboot forceifhung
) else (rem ---Выводим информационное сообщение об окончании установки обновлений и необходимости в перезагрузке ---
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe win close title %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe infobox %Text_InfoBox_5% %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe beep 200 800
)
exit
rem ===============
rem ===ПРОЦЕДУРЫ===
rem ===============
rem ---Процедура проверки соответствия версии и языка операционной системы---
:chk
rem ---Проверяем версию операционной системы---
for /f "tokens=2*" %%v in ('reg query "%detect_SP%" /v ProductName^|findstr /I /C:"ProductName"') do (
if not "%%w"=="%Chk_OS%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_0% %Title_InfoBox%
exit
)
)
rem ---Проверяем версию Service Pack операционной системы---
for /f "tokens=5" %%p in ('reg query "%detect_SP%" /v CSDVersion') do (
if not "%%p"=="%Chk_SP:~-1%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_0% %Title_InfoBox%
exit
)
)
rem ---Проверяем язык операционной системы---
if not exist "%ALLUSERSPROFILE%\%Chk_Lang3%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_1% %Title_InfoBox%
exit
)
goto :EOF
rem ---Процедура установки Microsoft .Net Framework 3.5 SP1 Rus с проверкой существования папки .\dotnetfx35 и сведений о данной версии в реестре---
:dotnetfx
if exist .\dotnetfx35 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
%delay%
xcopy .\dotnetfx35\dotnetfx35langpack_x86ru.exe %TEMP%\dotnetfx3530729.01\1033\dotnetfx35\x86\*.exe /Y >nul
start /wait .\dotnetfx35\dotnetfx35.exe %NetSwitches%
echo dotnetfx35 %NetSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
for /f "tokens=3" %%k in ('reg query "%detect_KB954550%" /v Location') do set NetPath=%%~dk%%~pk
rem rd /S /Q "!NetPath:~,-1!"
attrib +h !NetPath:~,-1!
%delay%
) ELSE (echo .NET Framework 3.5 SP1 Rus detected in %detect_NET%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==0 (
reg query "%detect_KB958481%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp20sp2-kb958481-x86.exe %NetUpdatesSwitches%
echo KB958481 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958481 detected in %detect_KB958481%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_KB958483%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp30sp2-kb958483-x86.exe %NetUpdatesSwitches%
echo KB958483 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958483 detected in %detect_KB958483%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_KB958484%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp35sp1-kb958484-x86.exe %NetUpdatesSwitches%
echo KB958484 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958484 detected in %detect_KB958484%>>%SystemDrive%\Detected_Updates.log)
)
)
goto :EOF
rem ---Процедура для установки обновлений из папки KBxxxxxx перечисленных в KB.txt---
:KBInst
rem ---Имя текущего обновления из файла KB.txt (значение первого параметра переданного данной процедуре) присваиваем переменной number---
set number=%~1
rem ---По умолчанию считаем, что ключи для установки текущего обновления в файле KB.txt не определены---
set UserSwitches=No
rem ---Если в файле KB.txt после имени обновления заданы ключи для установки обновления, присваиваем их переменной UserSwitches---
if not %2=="" set UserSwitches=%~2
rem ---По-умолчанию считаем, что ни одно обновление из папки KBxxxxxx не установлено---
set detect_key=0
rem ---Для "особенных" обновлений выполняем "особенную" проверку на предмет необходимости установки и прерываем выполнение процедуры в случае обнаружения сведений---
if %number%==KB923789 if not exist "%detect_KB923789%" (echo %number% new version of Macromedia Flash already installed>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
if %number%==KB946648 if not exist "%detect_KB946648%" (echo %number% skipped %detect_KB946648% not exist>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
if %number:~,3%==IE7 set detect_IE=%detect_IE7%
if %number:~,3%==IE8 set detect_IE=%detect_IE8%
if %number:~,3%==wua if exist "%detect_WUA%" (echo %number% detected in %detect_WUA%>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
if %number%==KB961118 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==KB963707 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==KB974417 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==msxml4 (
reg query "%detect_msxml4%" 1>nul 2>&1
if !ERRORLEVEL!==0 (echo %number% detected in %detect_msxml4%>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
)
if %number%==KB890830 if exist %windir%\system32\mrt.exe for /f "tokens=1" %%d in ('dir %windir%\system32\mrt.exe /T:W^|findstr /I /C:"mrt"') do (
if "%%d"=="%cur_date_mrt%" (echo %number% detected in %windir%\system32\mrt.exe - modified %%d>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
)
if %number%==KB905474 if not exist ".\KBxxxxxx\KB905474.exe" goto :EOF
rem ---Выполняем запрос сведений об обновлении во всех ветках реестра указанных в файле RegKeys.txt из папки Config и прерываем поиск при успешном запросе---
for /F "tokens=*" %%l in (.\Config\RegKeys.txt) do (
reg query "%%l" 1>nul 2>&1
if !ERRORLEVEL!==0 (set detect_key=1)&(echo !number! detected in %%l>>%SystemDrive%\Detected_Updates.log)&(goto chk_detect)
)
:chk_detect
rem ---Выполняем установку обновления если сведения в реестре не обнаружены---
if !detect_key!==0 (
rem ---Выполняем анализ наличия или отсутствия переопределения (в KB.txt) ключей установщика заданных по-умолчанию (в Set.txt)---
if !UserSwitches!==No (
if exist .\KBxxxxxx\%number%.exe (start /wait .\KBxxxxxx\%number%.exe %MainSwitches%) else (
if exist .\KBxxxxxx\%number%.msi (start /wait .\KBxxxxxx\%number%.msi !MainSwitches!) else (
echo %number% skipped file not found in KBxxxxxx>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
echo %number% %MainSwitches%>>%SystemDrive%\Installed_Updates.log
) ELSE (
if exist .\KBxxxxxx\%number%.exe (start /wait .\KBxxxxxx\%number%.exe !UserSwitches!) else (
if exist .\KBxxxxxx\%number%.msi (start /wait .\KBxxxxxx\msiexec /i %number%.msi !UserSwitches!) else (
if exist .\KBxxxxxx\%number%.cmd (start /wait /min .\KBxxxxxx\%number%.cmd !UserSwitches!)&(goto :EOF) else (
echo %number% skipped file not found in KBxxxxxx>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
)
echo %number% !UserSwitches!>>%SystemDrive%\Installed_Updates.log
)
rem ---Выполняем задержку перед установкой следующего обновления---
%delay%
goto :EOF
)
goto :EOF
rem ---Процедура удаления ярлыков Internet Explorer с рабочего стола и панели быстрого запуска с проверкой существования папки .\IE и сведений в реестре---
:IEclrlnk
if exist .\IE if exist "%USERPROFILE%\Application Data\Microsoft\Internet Explorer\Quick Launch\*Internet Explorer*.lnk" (
reg query "%detect_IE%" 1>nul 2>&1
if !ERRORLEVEL!==0 (
start /wait regedit /s .\IE\DDL_IE.reg
start /wait /min .\Tools\nircmd.exe shellrefresh
start /wait .\IE\IElnk.exe
)
)
goto :EOF
rem ---Процедура установки Windows Roots Update с проверкой соответствия текущей версии указанной в Set.txt---
:rootsupdate
for /f "tokens=3 delims= " %%v in ('reg query "%detect_rootsupd%" /v Version') do set detect_ver_rootsupd=%%v
if not "%detect_ver_rootsupd%"=="%cur_ver_rootsupd%" (.\Other\rootsupd.exe %OldSwitches%&echo Windows Roots Update %OldSwitches% - ver:"%cur_ver_rootsupd%">>%SystemDrive%\Installed_Updates.log
) ELSE echo Windows Roots Update detected in %detect_rootsupd%>>%SystemDrive%\Detected_Updates.log
goto :EOF
rem ---Процедура установки библиотек VC++ 2005 и VC++ 2008 с проверкой существования папки .\VC++ и веток реестра указанных в Set.txt
:VC++
if exist .\VC++ (
reg query "%detect_VC05%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\VC++\vcredist_x86_2005.exe %OldSwitches%
echo VC++ 2005 %OldSwitches%>>%SystemDrive%\Installed_Updates.log
%delay%
) ELSE echo VC++ 2005 detected in %detect_VC05%>>%SystemDrive%\Detected_Updates.log
reg query "%detect_VC08%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\VC++\vcredist_x86_2008.exe %OldSwitches%
echo VC++ 2008 %OldSwitches%>>%SystemDrive%\Installed_Updates.log
%delay%
) ELSE echo VC++ 2008 detected in %detect_VC08%>>%SystemDrive%\Detected_Updates.log
)
goto :EOF
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
rem ---Считываем файлы конфигурации Set.txt, OS_ver.txt, Text_ru.txt(Text_en.txt) из папки Config---
for /F "tokens=*" %%s in (.\Config\Set.txt) do set %%s
for /F "tokens=*" %%s in (.\Config\OS_ver.txt) do set %%s
(if "%Chk_Lang%"=="Russian" set Chk_Lang3=%Chk_Lang1%)&(if "%Chk_Lang%"=="English" set Chk_Lang3=%Chk_Lang2%)
for /f "tokens=3" %%c in ('reg query "%detect_CP%" /v OEMCP^|findstr /I /C:"OEMCP"') do if "%%c"=="866" (set text_lang=Text_ru.txt) else (set text_lang=Text_en.txt)
for /F "tokens=*" %%s in (.\Config\%text_lang%) do set %%s
rem ---Задаем заголовок окна CMD---
Title %Title_Cmd%
rem ---Скрываем окно CMD по заголовку---
start /WAIT /MIN .\Tools\nircmd.exe win hide title "%Title_Cmd%"
%delay%
rem ---Вызываем процедуру проверки соответствия версии и языка операционной системы---
call :chk
rem ---Выводим информационное сообщение о начале установки обновлений поверх всех окон со звуковым оповещением---
start .\Tools\nircmd.exe infobox %Text_InfoBox_2% %Title_InfoBox%
start /WAIT /MIN .\Tools\nircmd.exe beep 1500 2000
start /WAIT /MIN .\Tools\nircmd.exe win settopmost title %Title_InfoBox% 1
rem ---Делаем запись даты и времени выполнения скрипта в журналы Installed_Updates.log и Detected_Updates.log---
echo Date of installation: %time:~,-6% %date%>>%SystemDrive%\Installed_Updates.log&echo Date of detection: %time:~,-6% %date%>>%SystemDrive%\Detected_Updates.log
echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log
rem ---Включаем отображение расширений файлов в проводнике (только если существует файл HideFileExt.reg в папке Tools)---
if exist .\Tools\HideFileExt.reg start /high /wait regedit /s .\Tools\HideFileExt.reg
rem ---Отключаем службу восстановления системы (только если существует файл DisableSR.reg в папке Tools)---
if exist .\Tools\DisableSR.reg (
start /high /wait regedit /s .\Tools\DisableSR.reg
start /high /wait sc stop srservice >nul
)
rem ---Вызываем процедуру установки Microsoft .Net Framework 3.5 SP1 Rus---
call :dotnetfx
rem ---Для каждой не пустой строки файла KB.txt из папки Config вызываем процедуру :KBInst---
for /F "tokens=1,* delims= " %%k in (.\Config\KB.txt) do call :KBInst "%%k" "%%l"
rem ---Если установлено обновление KB890830 создаем ярлык (меню Пуск->Программы) для исполняемого файла в папке заданной в файле Text_ru.txt (Text_en.txt)---
if exist "%WINDIR%\System32\MRT.exe" .\Tools\nircmd shortcut "%WINDIR%\System32\MRT.exe" "~$folder.common_programs$\%MRT_Group%" "Microsoft Removal Tool"
rem ---Вызываем процедуру удаления ярлыков Internet Explorer с рабочего стола и панели быстрого запуска---
call :IEclrlnk
rem ---Вызываем процедуру установки Windows Roots Update---
call :rootsupdate
rem ---Вызываем процедуру установки библиотек VC++ 2005 и VC++ 2008---
call :VC++
if exist .\KBxxxxxx\KB905474.exe if exist .\WGA\WGAUpdate.exe start /wait .\WGA\WGAUpdate.exe
rem ---Записываем по две пустые строки в журналы Installed_Updates.log и Detected_Updates.log---
echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Installed_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log&echo.>>%SystemDrive%\Detected_Updates.log
rem ---Распаковываем утилиту nircmd.exe в папку %SystemRoot%\TEMP---
start /WAIT /MIN .\Tools\NirCmdInst.exe
rem ---После перезагрузки выводим информационное сообщение о полном окончании установки---
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce /v ReadyPreSP3 /t REG_SZ /d "%SystemRoot%\TEMP\nircmd.exe infobox \"%Text_InfoBox_4%\" \%Title_InfoBox:~,-1%\"" /f >nul
rem ---Проверяем значение ключа принудительной перезагрузки после окончания установки обновлений---
if %ForceReboot%==Yes ( rem ---Выводим информационное сообщение об окончании установки обновлений и предстоящей перезагрузке со звуковым оповещением---
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe win close title %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe infobox %Text_InfoBox_3% %Title_InfoBox%
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe beep 200 800
rem ---Выполняем перезагрузку после 10 секундной задержки---
start /B %SystemRoot%\TEMP\nircmd.exe cmdwait 10000 exitwin reboot forceifhung
) else (rem ---Выводим информационное сообщение об окончании установки обновлений и необходимости в перезагрузке ---
start /WAIT /MIN %SystemRoot%\TEMP\nircmd.exe win close title %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe infobox %Text_InfoBox_5% %Title_InfoBox%
start %SystemRoot%\TEMP\nircmd.exe beep 200 800
)
exit
rem ===============
rem ===ПРОЦЕДУРЫ===
rem ===============
rem ---Процедура проверки соответствия версии и языка операционной системы---
:chk
rem ---Проверяем версию операционной системы---
for /f "tokens=2*" %%v in ('reg query "%detect_SP%" /v ProductName^|findstr /I /C:"ProductName"') do (
if not "%%w"=="%Chk_OS%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_0% %Title_InfoBox%
exit
)
)
rem ---Проверяем версию Service Pack операционной системы---
for /f "tokens=5" %%p in ('reg query "%detect_SP%" /v CSDVersion') do (
if not "%%p"=="%Chk_SP:~-1%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_0% %Title_InfoBox%
exit
)
)
rem ---Проверяем язык операционной системы---
if not exist "%ALLUSERSPROFILE%\%Chk_Lang3%" (
start .\Tools\nircmd.exe infobox %Text_InfoBox_1% %Title_InfoBox%
exit
)
goto :EOF
rem ---Процедура установки Microsoft .Net Framework 3.5 SP1 Rus с проверкой существования папки .\dotnetfx35 и сведений о данной версии в реестре---
:dotnetfx
if exist .\dotnetfx35 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
%delay%
xcopy .\dotnetfx35\dotnetfx35langpack_x86ru.exe %TEMP%\dotnetfx3530729.01\1033\dotnetfx35\x86\*.exe /Y >nul
start /wait .\dotnetfx35\dotnetfx35.exe %NetSwitches%
echo dotnetfx35 %NetSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
for /f "tokens=3" %%k in ('reg query "%detect_KB954550%" /v Location') do set NetPath=%%~dk%%~pk
rem rd /S /Q "!NetPath:~,-1!"
attrib +h !NetPath:~,-1!
%delay%
) ELSE (echo .NET Framework 3.5 SP1 Rus detected in %detect_NET%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==0 (
reg query "%detect_KB958481%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp20sp2-kb958481-x86.exe %NetUpdatesSwitches%
echo KB958481 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958481 detected in %detect_KB958481%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_KB958483%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp30sp2-kb958483-x86.exe %NetUpdatesSwitches%
echo KB958483 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958483 detected in %detect_KB958483%>>%SystemDrive%\Detected_Updates.log)
reg query "%detect_KB958484%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\dotnetfx35\ndp35sp1-kb958484-x86.exe %NetUpdatesSwitches%
echo KB958484 %NetUpdatesSwitches%>>%SystemDrive%\Installed_Updates.log
(%delay%)&(%NetStop%)
) ELSE (echo KB958484 detected in %detect_KB958484%>>%SystemDrive%\Detected_Updates.log)
)
)
goto :EOF
rem ---Процедура для установки обновлений из папки KBxxxxxx перечисленных в KB.txt---
:KBInst
rem ---Имя текущего обновления из файла KB.txt (значение первого параметра переданного данной процедуре) присваиваем переменной number---
set number=%~1
rem ---По умолчанию считаем, что ключи для установки текущего обновления в файле KB.txt не определены---
set UserSwitches=No
rem ---Если в файле KB.txt после имени обновления заданы ключи для установки обновления, присваиваем их переменной UserSwitches---
if not %2=="" set UserSwitches=%~2
rem ---По-умолчанию считаем, что ни одно обновление из папки KBxxxxxx не установлено---
set detect_key=0
rem ---Для "особенных" обновлений выполняем "особенную" проверку на предмет необходимости установки и прерываем выполнение процедуры в случае обнаружения сведений---
if %number%==KB923789 if not exist "%detect_KB923789%" (echo %number% new version of Macromedia Flash already installed>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
if %number%==KB946648 if not exist "%detect_KB946648%" (echo %number% skipped %detect_KB946648% not exist>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
if %number:~,3%==IE7 set detect_IE=%detect_IE7%
if %number:~,3%==IE8 set detect_IE=%detect_IE8%
if %number:~,3%==wua if exist "%detect_WUA%" (echo %number% detected in %detect_WUA%>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
if %number%==KB961118 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==KB963707 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==KB974417 (
reg query "%detect_NET%" 1>nul 2>&1
if !ERRORLEVEL!==1 (echo %number% skipped MS .Net Framework 3.5 SP1 not detected>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
if %number%==msxml4 (
reg query "%detect_msxml4%" 1>nul 2>&1
if !ERRORLEVEL!==0 (echo %number% detected in %detect_msxml4%>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
)
if %number%==KB890830 if exist %windir%\system32\mrt.exe for /f "tokens=1" %%d in ('dir %windir%\system32\mrt.exe /T:W^|findstr /I /C:"mrt"') do (
if "%%d"=="%cur_date_mrt%" (echo %number% detected in %windir%\system32\mrt.exe - modified %%d>>%SystemDrive%\Detected_Updates.log)&(goto :EOF)
)
if %number%==KB905474 if not exist ".\KBxxxxxx\KB905474.exe" goto :EOF
rem ---Выполняем запрос сведений об обновлении во всех ветках реестра указанных в файле RegKeys.txt из папки Config и прерываем поиск при успешном запросе---
for /F "tokens=*" %%l in (.\Config\RegKeys.txt) do (
reg query "%%l" 1>nul 2>&1
if !ERRORLEVEL!==0 (set detect_key=1)&(echo !number! detected in %%l>>%SystemDrive%\Detected_Updates.log)&(goto chk_detect)
)
:chk_detect
rem ---Выполняем установку обновления если сведения в реестре не обнаружены---
if !detect_key!==0 (
rem ---Выполняем анализ наличия или отсутствия переопределения (в KB.txt) ключей установщика заданных по-умолчанию (в Set.txt)---
if !UserSwitches!==No (
if exist .\KBxxxxxx\%number%.exe (start /wait .\KBxxxxxx\%number%.exe %MainSwitches%) else (
if exist .\KBxxxxxx\%number%.msi (start /wait .\KBxxxxxx\%number%.msi !MainSwitches!) else (
echo %number% skipped file not found in KBxxxxxx>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
echo %number% %MainSwitches%>>%SystemDrive%\Installed_Updates.log
) ELSE (
if exist .\KBxxxxxx\%number%.exe (start /wait .\KBxxxxxx\%number%.exe !UserSwitches!) else (
if exist .\KBxxxxxx\%number%.msi (start /wait .\KBxxxxxx\msiexec /i %number%.msi !UserSwitches!) else (
if exist .\KBxxxxxx\%number%.cmd (start /wait /min .\KBxxxxxx\%number%.cmd !UserSwitches!)&(goto :EOF) else (
echo %number% skipped file not found in KBxxxxxx>>%SystemDrive%\Installed_Updates.log)&(goto :EOF)
)
)
echo %number% !UserSwitches!>>%SystemDrive%\Installed_Updates.log
)
rem ---Выполняем задержку перед установкой следующего обновления---
%delay%
goto :EOF
)
goto :EOF
rem ---Процедура удаления ярлыков Internet Explorer с рабочего стола и панели быстрого запуска с проверкой существования папки .\IE и сведений в реестре---
:IEclrlnk
if exist .\IE if exist "%USERPROFILE%\Application Data\Microsoft\Internet Explorer\Quick Launch\*Internet Explorer*.lnk" (
reg query "%detect_IE%" 1>nul 2>&1
if !ERRORLEVEL!==0 (
start /wait regedit /s .\IE\DDL_IE.reg
start /wait /min .\Tools\nircmd.exe shellrefresh
start /wait .\IE\IElnk.exe
)
)
goto :EOF
rem ---Процедура установки Windows Roots Update с проверкой соответствия текущей версии указанной в Set.txt---
:rootsupdate
for /f "tokens=3 delims= " %%v in ('reg query "%detect_rootsupd%" /v Version') do set detect_ver_rootsupd=%%v
if not "%detect_ver_rootsupd%"=="%cur_ver_rootsupd%" (.\Other\rootsupd.exe %OldSwitches%&echo Windows Roots Update %OldSwitches% - ver:"%cur_ver_rootsupd%">>%SystemDrive%\Installed_Updates.log
) ELSE echo Windows Roots Update detected in %detect_rootsupd%>>%SystemDrive%\Detected_Updates.log
goto :EOF
rem ---Процедура установки библиотек VC++ 2005 и VC++ 2008 с проверкой существования папки .\VC++ и веток реестра указанных в Set.txt
:VC++
if exist .\VC++ (
reg query "%detect_VC05%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\VC++\vcredist_x86_2005.exe %OldSwitches%
echo VC++ 2005 %OldSwitches%>>%SystemDrive%\Installed_Updates.log
%delay%
) ELSE echo VC++ 2005 detected in %detect_VC05%>>%SystemDrive%\Detected_Updates.log
reg query "%detect_VC08%" 1>nul 2>&1
if !ERRORLEVEL!==1 (
start /wait .\VC++\vcredist_x86_2008.exe %OldSwitches%
echo VC++ 2008 %OldSwitches%>>%SystemDrive%\Installed_Updates.log
%delay%
) ELSE echo VC++ 2008 detected in %detect_VC08%>>%SystemDrive%\Detected_Updates.log
)
goto :EOF
Примечания: