Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   Альтернативный способ автоматической установки Windows XP (http://forum.oszone.net/showthread.php?t=105422)

A.A.Z. 20-04-2008 19:05 785608

Альтернативный способ автоматической установки Windows XP
 
Всем привет.
Я одно время долго ломал голову, как можно объединить удобство автоматической (unattended) установки Windows с функциональностью возможности выбора пользователем нужных ему компонентов. В итоге появилась одна мысль.
Я написал программу, которая запускается по DetachedProgram на 39 минуте и следит за окнами. По замыслу, как только на экране появляется диалоговое окно, на кнопку "&Далее >" вешается "таймаут" - программа ждёт заданное кол-во секунд (допустим, 5), отображая это в Caption'е кнопки ("&Далее (5) >", "&Далее (4) >"...), и затем, в случае бездействия пользователя, по истечению 5 секунд сама нажимает на неё (если пользователь начнёт "активничать" - двигать мышку или нажимать на кнопки, то она прекращает свою деятельность по отношению к текущему окну). Таким образом планировалось достичь, как я уже написал, возможности автоустановки Windows путём предварительного задавания соответствующих настроек (серийник, языковые стандарты, сеть и т.д.) и параметра UnattendMode=ProvideDefault, который бы позволил пользователю, в случае чего, что-либо поменять. Например, собственно, имя пользователя, пароль админа и т.п.
Чего я, спрашивается, сюда пишу :) Так вот. Я решил отлавливать появляющиеся диалоговые окна по таймеру через GetForegroundWindow, а затем, если у этого окна класс #32770, искать на нём нужную дефолтную кнопку. Но окно самого первого диалога (в режиме ProvideDefault это как раз-таки диалог выбора имени пользователя и компании), как оказалось, появляется задолго до того, как мы видим его на экране после "установки устройств" - моя программа его обнаруживает и "вытаскивает" на поверхность в самом начале этапа установки устройств. Соответствено - первый вопрос, что бы вы могли посоветовать использовать вместо этого? Была идея отлавливать WindowFromPoint с центра экрана где-нибудь раз 10 в секунду, но пока не знаю, приведёт ли это к чему-нибудь, или нет. Второй вопрос, который возник, это собственно необходимость избегания этого самого "вытаскивания" окон наверх - а может, так оно и к лучшему - чем раньше пользователь введёт данные, тем лучше? Просто я точно не знаю, куда эти диалоги отправляют введённую информацию - не слишком ли рано они будут это делать на 39 минуте.
Наверное, пока всё... Буду рад любым ответам (и вопросам) :)

Drongo 20-04-2008 19:33 785622

A.A.Z.,
Цитата:

Цитата A.A.Z.
Таким образом планировалось достичь, как я уже написал, возможности автоустановки Windows путём предварительного задавания соответствующих настроек (серийник, языковые стандарты, сеть и т.д.) »

Если удастся закончить Ваш проэкт, то это будет классно! :up Я не спец и знаний не хватает, но думаю, что всё получится. Тем более основная часть написана, остался некоторый ряд частных вопросов. У меня единственный вопрос, не очень относящийся к сути, Ваша программа, она 32-разрядная?!

d petr 20-04-2008 19:33 785623

A.A.Z., Нечто подобное есть в этой теме. Там же можете и спросить у автора что и как.

A.A.Z. 20-04-2008 19:43 785632

Цитата:

Цитата Drongo
У меня единственный вопрос, не очень относящийся к сути, Ваша программа, она 32-разрядная?! »

Конечно :) Но 64-разрядную сделать будет не трудно, я думаю.
Цитата:

Цитата d petr
Нечто подобное есть в этой теме. Там же можете и спросить у автора что и как. »

Спасибо, но там автор подменял сам установщик и работал с .sif'ом напрямую, а я всего лишь "заменяю" действия пользователя :)

Vadikan 20-04-2008 21:32 785681

A.A.Z., в принципе, можно было бы сделать мультизагрузку - FullUnattended и ProvideDefault.

A.A.Z. 20-04-2008 21:59 785706

Цитата:

Цитата Vadikan
в принципе, можно было бы сделать мультизагрузку - FullUnattended и ProvideDefault. »

Вообще конечно да, но так более интересно :) Я собираюсь сделать сборку, которая будет устраивать как людей, которые не разбираются в этом во всём, так и более-менее продвинутых пользователей. Поэтому решил применить какое-нибудь изящное решение. Хотя идея с мультизагрузкой, наверное, самая простая в данной ситуации :)

[upd] В теории (пока что) можно будет в некоторых ситуациях отказываться от winnt.sif, чтобы сохранить консоль восстановления =) Я сейчас хочу заняться тем, чтобы понять, куда установка Windows, собственно, суёт все параметры из winnt.sif - может, их все можно будет "эмулировать" непосредственно в графическом этапе. Когда закончу - отпишусь =)

[upd2] Ура! :) Запустил Total Commander как DetachedProgram, дождался окончания установки устройств, установил Thinstall и WinRAR, замутил на своём ноуте виртуальный флоппик и теперь готов скопировать через него снимок "происходящего" на диске в данный момент. После этого планирую что-нибудь изменить в winnt.sif, прогнать установку ещё раз, сделать второй снимок и найти различия :)

[upd3] Наконец-то скопировал первый снимок системы, теперь очистил winnt.sif (всё, кроме [GuiAttended]) и собираюсь сделать второй снимок :)

[upd4] Сделал всё, убедился, что кроме %windir%\system32\$winnt$.inf (ну и оперативной памяти, естественно), настройки из winnt.sif нигде не хранятся. Сам $winnt$.inf опрашивается, судя по всему, практически сразу после запуска setup.exe, поэтому для более сложных манипуляций нужно действительно использовать метод подмены Setup'а. Завтра подумаю, как можно объединить мою программку и проект spectre4/fantik :) Если получится, то будет одновременно а) полностью изменяемая конфигурация Windows прямо в процессе установки; б) полностью автоматизированная установка Windows; в) консоль восстановления вместе с этой самой конфигурацией (над этим придётся ещё думать и думать).

vserd 21-04-2008 15:52 786120

A.A.Z.,
Цитата:

Цитата A.A.Z.
В теории (пока что) можно будет в некоторых ситуациях отказываться от winnt.sif, чтобы сохранить консоль восстановления »

А чего там думать. там просто нужно секцию [Unattended] начисто снести и будет тебе счастье....
только если ты запускаешь на T39, то консоль уже давно пропущена....

A.A.Z. 21-04-2008 16:47 786141

Цитата:

Цитата vserd
А чего там думать. там просто нужно секцию [Unattended] начисто снести и будет тебе счастье....
только если ты запускаешь на T39, то консоль уже давно пропущена.... »

В том-то и дело, что с помощью идеи о FakeSetup'е я попытаюсь отказаться от использования winnt.sif (точнее, заменяя его чем-то другим), создавая "вручную" $winnt$.inf в начале графического этапа установки и использования моей программки для дальнейшей автоматизации процесса (такие вещи, как, например, выбор раскладок клавиатуры, эмулировать довольно долго, поэтому я пока не отказываюсь от своей самой первой идеи).


Время: 09:39.

Время: 09:39.
© OSzone.net 2001-