![]() |
Только для экспертов! FAKE-Setup своими руками.
Метод использования Fake-копии SETUP.EXE был придуман неким Pyron с форума MSFN и нынче широко используется для Unattend-пакетов, в основном драйверов (пакеты от Bashrat, BoaSoft и др.). Подробней о том как он фунциклирует можно почитать в мануалах к пакетам и на форумах MSFN. Несмотря на простой алгоритм, для написания EXE-файла нужно быть немного программером, а это ИМХО не совсем справедливо! ;). Поэтому я решил реализовать его на AutoIT, но здесь ждал облом - AutoIT v.3 напрочь отказывался запускаться в PRE-Setup окружении WinXP, хотя между тем прекрасно работал из под Win2K. К счастью, все заработало на версии 2.64, которая до сих пор доступна для скачивания. Привожу пример скрипта, где совмещены обе возможности - AutoIT и PreSetup чтобы всегда можно было выбрать удобный интерфейс. Код намеренно не тестировался и может содержать ошибки - кому нужно, тот поймет что к чему. ;) Многое зависит еще от содержимого Presetup.Cmd Код:
HideAutoItWin,On 1. Свобода от правки inf-файлов, все инструменты включены уже в один файл - SETUP.EXE, который устанавливается простым копированием. 2. Свобода выбора между WATCHDRV и стандартным AutoIT-методом отслеживания окон, тем более что WATCHDRV отрабатывает не всегда. 3. Возможность условного заполнения реквизитов. Например, загрузив из INI-файла базу всех ПК можно автоматически заполнить имя машины, лицензионный ключ и т.д. Сам не пробЫвал - нужды пока не было. |
amel27
Объясни, плз, идею FAKE-Setup. Без этого невозможно понять суть своего предложения. |
bogomolv
Ok, осознал. Подправил скрипт - перегнал две строчки из PRESETUP.CMD чтобы смысл был ясен. Идея проста - оригинальный SETUP.EXE переименовывается в дистрибутиве в SETUPORG а вместо него подкладывают FAKE-копию, которая и запускается установщиком. FAKE-setup выполняет необходимые действия (обычно лишь запускает PRESETUP.CMD), переименовывает все обратно и, наконец, запускает оригинальный SETUP.EXE. Важно, чтобы FAKE-setup не завершал работу в течении всего процесса установки, иначе произойдет прерывание и перезагрузка. |
bogomolv
В старой версии статьи об установке драйверов с CD этот способ излагался. Он еще есть в старой оффлайн версии, наверное. И на MSFN он есть на англ. |
amel27, Vadikan
Спасибо, понял о чем речь. Но вопросы к amel27 остались: Из твоего скрипта не видно, зачем тебе "свобода выбора между WATCHDRV и стандартным AutoIT-методом отслеживания окон", и где и как ты собираешься юзать "возможность условного заполнения реквизитов"? А вообще-то метод заинтересовал с точки зрения возможности реализации одного трюка, которым давно пользуюсь, но делаю это коряво: Одним из стандартных приемов установки Windows является выделение на диске раздела под систему с последующим автоматическим переформатированием этого раздела в ходе переустановки системы. Так красиво и элегантно избавляемся от мусора и возможности воспроизведения кривых настроек прежней системы. К тому же в ходе автопереустановки не появляется нарушающий unattend'ность запрос, что делать со старой папкой Windows. Способ всем хорош, но его условие - наличие свободного раздела. Не все это любят, а неподготовленные пользователи к тому же не умеют им пользоваться, и бесполезно им объяснять, что не надо сохранять свои документы на диске C:! Я для автоудаления прежней системы использую такую конструкцию: 1. На винчестер кладу заточненный под пользователя дистрибутив со всеми дровами и всеми дополнительными программами (что-то вроде дистрибутива на скрытом разделе ноутбуков Asus). 2. Разворачиваю на диске WinPE (в собственной облегченной сборке). 3. Запуск переустановки системы осуществляется файлом UNATTEND.BAT, который из-под Windows меняет BOOT.INI, создает маркерный файл и отправляет систему на перезагрузку под WinPE: Код:
echo Удалить системные файлы>>c:\delwin.bat Код:
del %DISK%:\delwin.bat В принципе, я и свою конструкцию неплохо отточил: перезагрузка и запуск установки из-под WinPE занимают у меня не более 50 сек, нарисовал скрипты автоматизации процесса развертывания WinPE на жестком диске, та же самая WinPE на установочном мультизагрузочном CD служит для подготовки жесткого диска на новом компьютере, а на самом жестком диске WinPE в качестве дополнительной оси неплохо помогает восстановить рухнувшую систему. Удается даже руководить этими процессами по телефону, подсказывая детям своих друзей и знакомых, что и как нужно сделать, чтобы ОНО опять заработало :) |
bogomolv
Цитата:
2. Это только "мысли вслух"... Как вариант - дождаться окна ввода реквизитов, затем идентифицировать к-либо способом машину (MAC-адрес, BIOS или еще как... тут нужно обмозговать), по этому индексу вытянуть из INI-файла нужную инфу и вставить куда надо. З.Ы. В AutoIT меня не устраивает только привязка к языку, а собирать титлы окон для всех языков (у меня их три) и систем (тоже три) не очень хочется... |
bogomolv
Цитата:
1. Запустить под Windows первую фазу установки (только копирование): Код:
winnt32.exe /tempdrive:c /unattend:unattend.txt /noreboot а также BOOT.INI типа: Код:
[Boot Loader] 3. Проверить содержимое winnt.sif в $WIN_NT$.~BT на предмет строчек: Код:
[Unattended] 5. Сваять скрипт, который при запуске копирует коталоги $WIN_NT$.* и BOOT.INI в корень диска C: и перегружает машину, после чего сразу стартует графическая часть Unattend-установки. З.Ы. Одно "неудобство" - папка %WINDIR% после каждой переустановки будет называться по другому. |
amel27
Спасибо, буду думать. На первый взгляд - еще более тяжеловесная конструкция... |
bogomolv
Цитата:
|
amel27
Цитата:
Так и не понял, что представляют собой эти временные каталоги? Насколько они универсальны, и можно ли их использовать для установки на разных машинах? Не является ли этот метод чем-то вроде Sysprep-установки, рекомендуемой для однотипных машин... Подробности уже подзабыл, но осталась уверенность, что этот метод не для моего подхода, когда я из стандартного дистрибутива и заготовок драйверов и программ общего назначения готовлю дистрибутив, заточенный под конкретного пользователя и его машину (или группу машин). |
bogomolv
Цитата:
~BT - загрузочные файлы (полный набор из загрузочных дискет, только с учетом обновлений) Цитата:
В контексте твоего вопроса все это можно понимать как отложенную установку, которую можно продолжить при необходимости в любое время. |
amel27
Спасибо за толковое разъяснение. А ссылку на свежее описание метода не дашь? У меня сохранилась ссылка только на старое описание, которое уже давно не обновлялось. |
bogomolv
нет, ссылки нет но там практически ничего не изменилось, вот несколько дополнений из личного опыта: 1. Для того чтобы к GOSH-дистрибутиву можно было применять трансформ-паки типа nLite нужно дополнительно скопироватьиз дистрибутива файл dosnet.inf... а если изменения касаются txtsetup.sif, то по окончании процесса скопировать его из i386 в BOOT. Для пакетов драйверов, затрагивающих начальную фазу загрузки (MassStorage) нужно дополнительно скинуть из i386 в BOOT файлы *.sys (только новые). 2. Для локализованных версий нужно дополнительно скопировать bootfont.bin 3. Для XP SP2, 2K3 SP1 файл setupldr.bin взять из дистрибутивов XP SP0/SP1, 2K3 SP0 |
Цитата:
|
Если я понял все правильно, то FAKE-setup делает нечто, после чего передает управление настоящему файлу setup.exe, который отрабатывает после копирования файлов и перезагрузки.
Выше писали о том, как бы все от старой винды почистить, а потом ставить начать, при этом запустив все из Windows. Так может проще сделать так: 1. Код:
winnt32.exe /tempdrive:c /unattend:unattend.txt /noreboot 3. Батник создаем и кладем его в $WIN_NT$.~LS. Например так: create.bat Код:
@echo off Установка файлов винды, копирование батника, перезагрузка компа. Или я чего-то не понял? Если так - поясните пожалуйста ;) |
Только что проверил на виртуалке.
У меня почему-то не создается директория [и]$WIN_NT$.~LS[/b] Но при этом инсталляция идет(проверил после перезагрузки). Более того, директория $WIN_NT$.~BT занимает около 10Мб. Кто-нибудь может обьяснить, как такое может быть? P.S. Проверил dosnet.inf, он далеко не пустой. ----------- Дело в файле автоустановки (*.sif). Попробовал без него ввести серийник и прочее руками - все ок. Может галочка - копировать все файлы не ставится по умолчанию? --------------- Точно, только что проверил. По-умолчанию эта галка не стоит... |
DmitryOlenin
Цитата:
Цитата:
EDIT: извиняюсь, насчет %windir% поторопился - действительно, CMD создается еще в старой Windows... Текст не стал править, остальное остается в силе. |
amel27
Проверил бы... Только я пока до конца не разобрался во взаимодействии упакованного setup.ex_, setuporg.exe и presetup.bat. У меня драйвера от Башрата, так что, по идее, все это должно использоваться. Cтрочка rd /q /s d:\windows, именно так она выглядела после отработки батника в старой винде, не отработала в том самом presetup.bat. P.S. Да, кстати, я попробовал написать на чем угодно setup.exe. 7Кб вышло. Да, кстати, само себя переименовать он вполне может. Я так понял под cdm имелось в виду cmd. Если у меня получится сначала передать управление моему файлу, то, есть предположение, каталог вида d:\windows вполне удалится. |
amel27, DmitryOlenin
Ткните пальцем, куда класть свой setup.exe, кого при этом переименовывать и т.д. Ваши предложения: Код:
REN Setup.exe SetupOld.exe,%SystemRoot%\\System32 Пока лишь удалось создать дистрибутив из временных папок $WIN_NT$.~LS и $WIN_NT$.~BT и вписать его в свою конструкцию переустановки с HDD: 1) с HDD запускается батник, создающий маркерный файл и перезапускающий систему под WinPE; 2) WinPE, реагируя на маркерный файл, удаляет системные папки и копирует из нового дистрибутива $WIN_NT$.~LS, $WIN_NT$.~BT и boot.ini и вновь отправляет машину на перезагрузку; 3) после перезагрузки подхватываются $WIN_NT$.~LS и $WIN_NT$.~BT и начинается установка Windows. В результате удалось сэкономить 1 минуту на первом графическом этапе установки с HDD, и установка всей системы (с дровами и прогами) занимает 13 мин 40 сек. Если научите, как и чем удалять системные папки, не презагружаясь в WinPE, удастся сэкономить еще 40 сек. А вот с размерами дистрибутива выигрыш небольшой - 379MB против прежних 392MB (это без папки $OEM$). Кстати о рекордах. При обычном способе вся система у меня ставится примерно за 14 мин 40 сек - 15 мин. Когда вышел на этот уровень, обнаружилась такая ерунда - после завершения последнего графического этапа установки остается голубой экран с курсором и система висит до 2 минут, лишь изредка помигивая лампочкой активности HDD. В итоге никак не мог перешагнуть рубеж в 16 мин 30 сек. Вот выдержка из setuplog.txt: Код:
04/21/2006 21:29:53.077,d:\xpsprtm\base\ntsetup\syssetup\services.c,496,,SetupStartService: Sending StartService to <Eventlog> Setuplog.txt такой установки: Код:
04/21/2006 23:11:02.187,d:\xpsprtm\base\ntsetup\syssetup\services.c,496,,SetupStartService: Sending StartService to <Eventlog> Да и решением найденый способ, конечно, назвать нельзя. Сам знаю, что MSI-установщики не рекомендованы для CMDLINES. В результате MSIntelliPoint нормально ставится в одном случае из пяти, а Nero7 так вообще приходится переустанавливать на следующей стадии... P.S. Дистрибутив WinXP SP2 Prof RUS Corporate Edition (самоделка). Проверял на несамодельной WinXP SP2 Prof RUS VLK. Кроме того, что она у меня всегда ставится на 2 минуты дольше (заметно медленнее идет стадия копирования файлов), поведение такое же. Пробовал и с интегрированными обновлениями и без - все так же. |
DmitryOlenin
Цитата:
bogomolv Цитата:
Цитата:
- использовать txtsetup.sif (можно запаковать в setuporg.ex_); - использовать ф-цию AutoIT FileInstall; - прямое копирование перед переименованием. Имхо не лучший вариант, т.к. привязан к абсолютному пути. 2. Запаковать Fake setup.exe в setup.ex_ и поместить в i386 Код:
REN Setup.exe SetupOld.exe Цитата:
|
amel27
Как перед запуском setup.exe можно что-то запустить? Обьясните, если возможно, как взаимодействуют setup.exe, setuporg.exe и, собственно, предполагаемый presetup.bat. Я понял так, что после загрузки из bootsect.dat(кажется так) винды распаковывает и запускает setup.exe. В случае, если в txtsetup.sif как-то хитро(пока не понял, что означают эти запятые и цифры) прописаны setuporg.exe и некий батник(например presetup.bat), то сначала запускаются они, а потом управление передается настойщему setup.exe. Но что и как надо запаковывать, а главное надо ли - я не понял. А так же попробовал прописать что-нибудь в уже готовый presetup.bat - не выполняется. Несмотря на то, что этот файл из комплекта драйверов от Bashrat и у меня нет причины сомневатся в его работоспособности... |
DmitryOlenin
Цитата:
З.Ы. Скрипт в первом сообщении вполне рабочий. ;) |
amel27
Я просил пояснить последовательность действий винды после перезагрузки. По какому именно принципу что запускается. Что переименовывать надо из запускаемых файлов - это я и сам понял. Меня интересуют механизмы взаимодействия. Как что и с чем. Пока что я этого так нигде и не увидел... По ссылке от Vadikan лишь прочел порядок действий для интеграции драйверов при использовании этого метода. P.S. Спасибо за разъяснение насчет txtsetup.sif. Хотя я все еще не понял - это для первичного копирования на HDD или для копирования после запуска "синей" установки. |
Цитата:
Я тестил утилиту в винде на неподписанных драйверох - все отработало. При установке - не отработало. Какие установки были в sif ? |
amel27
Ну и...? Чего молчим? Чего ждем? :) Колись! Так Fake-setup отрабатывает на 39 мин.? Я пока добился только зависания на этой стадии. Есть серьезные подозрения :), что именно на этой стадии и должен отработать твой скрипт. Значит, для моей задачи он не подходит и не может подойти? Прежнюю-то папку Windows мне нужно затереть до "синей" стадии копирования! До запроса о том, что делать со старой папкой! |
Да-да, я все тоже жду ответа на мое сообщение... Надеюсь автор сможет прояснить не совсем ясные для меня моменты.
|
Цитата:
|
Время: 12:21. |
Время: 12:21.
© OSzone.net 2001-