jameszero, у меня вот давно уже вопрос возник: а нельзя сделать утилиту для подписывания измененных inf-файлов и добавлении соотв. cat-файлов прямо при работе UpdatePack? (Ну или хотя бы подправить тот же syssetup.inf в соответствии с тем же аддоном Z-Del_Upgrade, т.к. UpdatePack все равно нужно ставить на чистую систему, и сделать для него доп. запись или отдельный cat-файл вместе с самим файлом, передаваемым через папку Files).
Ну и еще заодно предложения по возможностям UpdatePack:
1. я тут уже реализовал замену всех этих sysoc-ов (для внесения записей в реестр да удаления файлов/папок на T-13) на запуск одного единого bat-файла в конце T-13, - вот так:
читать дальше »
в аддоне Z-Dll_Patcher (ну, ниже всех расположен, хотя думаю создать отдельный аддон на его уровне) добавил папку Files\ForceCopy\SVCPACK\ и 2 файла - Start и Start!.cmd со следующим содержимым (отталкивался от логики аддонов anddy и делал по подобию; отличие этих 2-х файлов только в верхних строчках, т.к. Start подхватывается UpdatePack-ом, а Start!.cmd служит для тестинга, - т.е. запускается из своей папки).
Верх файла Start:
Цитата:
@Echo Off
Set WD=%~1
Set BIN=BIN
Set Addons=Addons
|
Содержимое файла Start!.cmd:
Цитата:
@Echo Off
Set WD=.
Set BIN=..\..\BIN
Set Addons=..\..\Addons
If Not Exist "%BIN%\Iconv.exe" (
Echo Отсутствуют служебные файлы аддона %~1!
Echo.
Echo Выполнение прервано
pause
GoTo :EOF
)
Set Run="%WD%\Run"
Echo 0_Run.cmd>%Run%
Set RunCmd="%WD%\Files\ForceCopy\SVCPACK\0_Run.cmd"
Echo @echo off>%RunCmd%
Echo echo START!>>%RunCmd%
Echo CD /D "%%SystemRoot%%">>%RunCmd%
Echo.>>%RunCmd%
Set RunMod=0
For /F "UseBackQ Delims=" %%I In (`Dir %Addons% /AD /B /ON 2^>nul`) Do (
If Exist "%Addons%\%%I\RunCmd" (
%BIN%\Iconv.exe -c -f cp1251 -t cp866 "%Addons%\%%I\RunCmd">>%RunCmd%
Echo.>>%RunCmd%
Set RunMod=1
)
)
If "%RunMod%"=="0" del /f /q %Run%
|
Что делает этот файлик Start:
1. на начальном этапе обработки скриптом __PATCH.CMD аддона UpdatePack производится просмотр подпапок папки addons в поисках файлов RunCmd (без расширения, как и Run, в ANSI-cp1251-кодировке), которые представляют собой обычные bat-ники, - ну, для удаления папок, к примеру.
2. Все эти файлы собираются в единый файл 0_Run.cmd, лежащий в SVCPACK, причем перекодируются из кодировки cp1251 в кодировку cp866 (с помощью iconv.exe из папки BIN) для правильной обработки кириллических путей.
3. в корне аддона Z-Dll_Patcher создается файл Run (который подхватывается UpdatePack-ом на следующем этапе обработки, - вместе с копированием файлов) с содержимым '0_Run.cmd', и т.к. это самый нижний аддон, то запуск файла 0_Run.cmd добавляется в самый низ секции [SetupHotfixesToRun] файла Svcpack.inf, - т.е. запустится после всех прочих файлов, прописанных в Run аддонов выше.
Ну еще в самом верху файла '0_Run.cmd' прописываются автоматом строки:
Цитата:
@echo off
echo START!
CD /D "%SystemRoot%"
|
т.е. сразу отрубаем echo, вывешиваем Start! для того, чтобы отличить свое окошко от других, а также делаем переход в %SystemRoot% с ключом /D, чтобы не заморачиваться с этим в других bat-никах.
Плюсы: всего 1 cmd-окно взамен пачки, нет копирования левых inf-файлов и забивания sysoc.inf всяким мусором; т.к. запуск осуществляется в конце T-13, можно как регистрировать библиотеки для аддонов, так и сносить доп. левые папки.
Я уже протестил эту фишку и убрал из всех используемых мной аддонов (акромя UpdatePack, WMP11 и CodecPack - но они на очереди) sysoc-и (ну и dosnet, txtsetup и соотв. inf-файлы), т.к. всё прекрасно вносится в реестр (или удаляется из него) и регистрируется. + Твики реестра копирую в составе 1 svcpack-аддона (с обоинами, правкой файлов oobе, темой и еще кой-какими мелочами) в %SystemRoot%, а в самом RunCmd прописано
Цитата:
SET KEY=HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
REG ADD %KEY% /v Z-Config /d "REGEDIT /S %SystemRoot%\hklm.reg" /f >nul
REGEDIT /S hkcu.reg
del /f /q hkcu.reg
REGEDIT /S hklm.reg
|
названия 2-х файлов для импорта в реестр оставлены теми же, что были по старой традиции и прекрасно вносятся в реестр (ну, мож неуказывание путей сработало по той простой причине, что это 1-й файл после шапки, в которой указано CD /D "%SystemRoot%").
по идее, можно эту фишку добавить в корне аддона UpdatePack (в __PATCH.CMD).
2. вот что я заметил: зачастую - при удалении файлов посредством DelOC.lst - помимо файлов Dosnet.inf, Txtsetup.sif и Sysoc.inf, нужно править еще и файлы hivesys.inf (названия файлов после \RCV2\), DEFLTWK.INF (права для файлов и папок), - оба не являются защищенными и их можно править (не, ну я понимаю трудности с правкой hivesys.inf, - там строки переносятся, но могу помочь с этим, - напишу утилиту - аналог проги сноса строк - на Perl, у которого dll с exe весят 668 Kb, - можно их в корень UpdatePack или в BIN кинуть). Ну еще есть записи в syssetup.inf, только его просто так не подправишь. Видел много Z-Del-аддонов, которые акромя правки записей в этих файлах больше ничего не делали.
3. собственно, хотелось бы узнать, всё-таки все эти записи об update-ах, вносимые в реестр, являются жизненно важными (в частности, не понимаю смысла их внесения в секции деинсталляции, - ведь их все равно удалить нельзя, а в том же Reg Organizer всё это дело жутко смотрится).
Касаемо этого самого выскакивающего окошка WFP: просидел целый день и нашел таки источник ошибки, - как я и думал, собака порылась в аддоне
Z-Dll_Patcher. На это натолкнула вот эта информация
Цитата dimkis:
wrace, а не пробовали вы разобраться из-за чего возникает сообщение о замене файлов и запрос дистрибутива при подключении USB-устройств? Похоже в этом виноват не конкретный z-del аддон, а вообще сам факт их применения. Пробовал собирать дистрибутив без z-del аддонов - сообщения нет, стоит добавить хотя бы один - появляется это сообщение.
|
Цитата Nun-Nun:
2) с обсуждаемой проблемой впервые столкнулся при использовании Fake-Setup Advanced, и поначалу грешил на него, но потом убедился, что проблема не исчезла и при Z-Dll_Patcher-е
|
ну и самое главное - вот этот кусок выложенных мной логов
Цитата:
[2011/02/22 22:55:32 504.7]
#-199 Выполнение "\??\C:\WINDOWS\system32\winlogon.exe" с командной строкой: winlogon.exe
#-167 SPFILENOTIFY_NEEDMEDIA: Тег="\win51ip.sp3", Описание="Windows XP Professional Service Pack 3 CD", ПутьИсточника="D:\i386", ФайлИсточника="syssetup.inf", Флаги=0x00000000.
#E169 SPFILENOTIFY_NEEDMEDIA: возвращено FILEOP_ABORT. Ошибка 1223: Операция была отменена пользователем.
#W187 Ошибка установки, попытка восстановления оригинальных файлов.
|
Всё ведь прямым текстом написано, - спецом заболдил.
Короче говоря: проблема - в измененном (читай - неподписанном) файле syssetup.inf; т.е. как только юзаются аддоны, которые изменяют этот файл, тут же начинают выскакивать те самые окошки, о которых идет речь. В общем, эти ребята со своим Fake-Setup Advanced так до конца и не допатчили нужные файлы.
Для себя даже сделал версию патчей (юзая инфу вот
отсюда), которые делали только вот это:
читать дальше »
1. syssetup.dll
- Отключение защиты файла Syssetup.inf от изменений для возможности
тонкой настройки процесса установки ОС.
- Отключение запуска системы SFC(WFP) для принудительного сканирования
всех защищенных системных файлов на Т-8 графического этапа установки
(экономия времени на установку ОС - 5-10 минут).
2. setupapi.dll
- Отключение всплытия «Мастера нового оборудования» для ручной установки драйвера при подключении новых устройств, для которых в драйверных архивах ОС уже имеются драйвера, если в системе используются патченые файлы SysSetup.dll, Desk.Cpl, MmSys.Cpl, NetCfgx.dll, и другие…
Мастер, правда, все равно всплывал (на файлах syssetup.inf и msmouse.inf), - чтобы он не появлялся, нужны еще и прочие патчи указанных dll, которые я убрал на время тестинга. По идее, можно было бы поисследовать dll дизассемблером, только вот нафига, - мож
jameszero поможет с подправленной и подписанной версией syssetup.inf, - тогда и этот патчер нафиг не нужен.
