Войти

Показать полную графическую версию : [решено] Редактирование svcpack.inf в процессе установки Windows


sLiDeR-X
17-06-2010, 10:59
Необходимо для создания интерактивного выбора устанавливаемых программ из presetup.cmd
Методика описана тут (http://forum.oszone.net/post-1435824.html#post1435824) или смотрим здесь:
======
Касаемо Presetup.cmd

Предлагаю вам конструкцию presetup для возможности выбора устанавливаемых компонентов. Я сделал его для возможности выбора "весомых" программ на этапе RunOneEx. Вы можете прикрутить еще и к Т-13.

Сделал это для интерактивного выбора установки программ для разных компьютеров (слабых, старых, новых...) и для потребности каждого пользователя в отдельности (себя - для быстрой установки на виртуальную машину).

Если кто-то скажет, что для этого есть WPI и BS PostInstall - отвечу вам что использовать их не хочу и не желаю наворачивать дополнительными программами диск.

Вот сама конструкция
:: ================================== Конструкция для интерактивного выбора программ ==================================
:: ======================================================= НИЖЕ =======================================================
:DotNET
if exist %SrcDosPath%\I386\SVCPACK\DNet1140.exe (
MSGBOX.EXE "•®вЁвҐ гбв**®ўЁвм .NET Framework 2.0...4.0 ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="7" (
expand -r %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
find /V "DNet1140.exe -ai2P -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf >> %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new
move /y %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
)
)
:Office
if exist %SrcDosPath%\I386\SVCPACK\office2007.exe (
MSGBOX.EXE "•®вЁвҐ гбв**®ўЁвм Office 2007 ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="7" (
expand -r %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
find /V "office2007.exe -ai -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf >> %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new
move /y %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
)
)
:Winstyle
if exist %SrcDosPath%\I386\SVCPACK\Winstyle.exe (
MSGBOX.EXE "•®вЁвҐ §*ЇгбвЁвм Ё§¬Ґ*Ґ*ЁҐ Ё*вҐа䥩б* Windows ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="7" (
expand -r %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
find /V "Winstyle.exe -ai -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf >> %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new
move /y %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
)
)
:xReset
if exist %SrcDosPath%\I386\SVCPACK\xReset10.exe (
expand -r %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
find "DNet1140.exe -ai2P -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
if %ERRORLEVEL%==0 (
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
goto Drivers
)
find "office2007.exe -ai -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
if %ERRORLEVEL%==0 (
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
goto Drivers
)
find "Winstyle.exe -ai -gm2" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
if %ERRORLEVEL%==0 (
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
goto Drivers
)
find /V "xReset10.exe -aiK -! 120 zzzzzzReset" %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf >> %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new
move /y %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf.new %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
makecab %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf %systemdrive%\$WIN_NT$.~LS\I386\svcpack.in_
del %systemdrive%\$WIN_NT$.~LS\I386\svcpack.inf
)
)
:: ======================================================= ВЫШЕ =======================================================
:: ================================== Конструкция для интерактивного выбора программ ==================================


П.С.
Может быть как-то можно оптимизировать код, но я не знаю как, т.к. писал для своего уровня познания %)
======

Я так понял, что при запуске установки из Windows на системном диске создаются папки $WIN_NT$.~LS ...
Соответственно presetup.cmd отработает корректно.
При запуске из DOSа, видимо, методика другая.

Возможна ли реализация сабжа?

sLiDeR-X
17-06-2010, 11:28
Придумал другую реализацию данной задачи.

Текст, добавляемый в presetup.cmd
:: ================================== Конструкция для интерактивного выбора программ ==================================
:: ======================================================= НИЖЕ =======================================================
:DotNET
if exist %SrcDosPath%\I386\SVCPACK\DNet1140.exe (
MSGBOX.EXE "•®вЁвҐ гбв**®ўЁвм .NET Framework 2.0...4.0 ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="6" md "%systemdrive%\RunOnceEx\777"
)
:Office
if exist %SrcDosPath%\I386\SVCPACK\MSOffice2007.exe (
MSGBOX.EXE "•®вЁвҐ гбв**®ўЁвм MS Office 2007 ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="6" md "%systemdrive%\RunOnceEx\888"
)
:Winstyle
if exist %SrcDosPath%\I386\SVCPACK\Winstyle.exe (
MSGBOX.EXE "•®вЁвҐ §*ЇгбвЁвм Ё§¬Ґ*Ґ*ЁҐ Ё*вҐа䥩б* Windows ЇаЁ ЇҐаў®¬ ўе®¤Ґ ў бЁб⥬г? “бв**®ўЄ* ¬®¦Ґв §**пвм ¤«ЁвҐ«м*®Ґ ўаҐ¬п!" "MSGBOX" 3 3 10 && cmdow.exe MSGBOX /top
if "%errorlevel%"=="6" md "%systemdrive%\RunOnceEx\999"
)
:: ======================================================= ВЫШЕ =======================================================
:: ================================== Конструкция для интерактивного выбора программ ==================================

После отработки presetup.cmd обрабатывается эддон y-RunOneEx (прикреплен)

Для работы необходим эддон CMD_Files (http://forum.oszone.net/attachment.php?attachmentid=46369&stc=1&d=1276759361)

Для оптимизации установки Windows и ускорения времени установки данный метод не совсем оптимальный (хочется реализовать метод, описанный в шапке)

sLiDeR-X
18-06-2010, 13:46
upd

mamont1
18-06-2010, 15:17
Я пользую приблуду от NOV
http://forum.oszone.net/post-903496.html#post903496 - и ниже сами файлы
там тоже родной сетуп подменяется - мож пригодится
исходники - (по моему так называется-?) тоже есть. могу скинуть.

sLiDeR-X
19-06-2010, 16:51
сделал finish следующего содержания:

@echo off
setlocal enabledelayedexpansion

Set WD=%~1
set file=svcpack.inf

If Exist "%I386%\%file%" Copy "%I386%\%file%" "%WD%\">nul

expand -r svcpack.in_
set file=svcpack.inf

for /f "delims=[] tokens=1" %%a in ('find /n "SetupHotfixesToRun" %file%') do set /a line=%%a-6

del /q tmp_file 2>nul
set counter=1
for /f "tokens=*" %%a in (%file%) do (
echo %%a>>tmp_file
if "!counter!"=="!line!" (
echo SetupHotfixes.bat>> tmp_file
goto Finish
)
set /a counter+=1
)
:Finish
move /y tmp_file %file%
makecab %file%
del /q %file% 2>nul

Copy /Y "%WD%\%file%" "%I386%\">nul

но он не отрабатывает вообще. подскажите где я делаю неправильно
и как сделать так, чтоб орбаватывались пустые строки тоже

sLiDeR-X
20-06-2010, 17:55
И все-таки я добил задуманное

Сделал [addon] z-KeepPrefSVC (http://forum.oszone.net/thread-178710.html)

Полностью осуществляет поставленные в шапке темы задачи!
Просьба протестировать :)




© OSzone.net 2001-2012