RunOnceEx

Автор: Вадим Стеркин aka Vadikan
Иcточник: (частично переведено с английского) unattended.msfn.org
Опубликована: 25.02.2005

Установку приложений, импортирование ключей реестра и прочие задачи можно выполнять при помощи пакетных файлов, запускаемых из [GuiRunOnce]. Если вы хотите, чтобы все вышеперечисленные задачи сопровождались элегантным пользовательским интерфейсом,

RunOnceEx

то вникайте в содержимое данной статьи.

Принцип работы способа RunOnceEx

Сначала создается пакетный файл RunOnceEx.cmd, основным назначением которого является импорт записей в системный реестр. Программы, которые необходимо установить, и команды для их установки указываются в виде параметров реестра. Импорт параметров в реестр происходит за 12 минут до окончания установки Windows (Т-12) путем запуска файла RunOnceEx.cmd из файла cmdlines.txt. Установка программ происходит при первом входе в систему первого пользователя. В остальном же файл RunOnceEx.cmd является обычным пакетным файлом, поэтому из него также можно выполнять любые команды, которые вы хотите запустить на Т-12.

С чего начать?

Если вы применяете секцию [GuiRunOnce] файла ответов для выполнения команд при первом входе в систему, то вы можете отказаться от ее использования, поскольку с помощью RunOnceEx достигается аналогичный эффект. Можно, в принципе, и скомбинировать оба метода, но при этом нужно учесть порядок выполнения команд: сначала отрабатывают команды RunOnceEx, затем [GuiRunOnce] (спасибо за уточнение, DJ Cool ).

Чтобы запустить RunOnceEx при первом входе в систему нам надо импортировать некоторые ключи реестра во время программы установки Windows. Мы можем это проделать при помощи файла cmdlines.txt, который исполняет серию команд за 12 минут до окончания установки системы. Создайте в Блокноте файл cmdlines.txt и скопируйте туда следующие строки:

[COMMANDS]
"RunOnceEx.cmd"

Сохраните файл как cmdlines.txt в C:\XPCD\$OEM$\

Создание файла RunOnceEx.cmd

Файл будет содержать синтаксис утилиты командной строки REG.exe для импортирования ключей в реестр. Такой способ позволяет использовать системную переменную %systemdrive%.

Примечание. Утилита REG.exe не входит в состав Windows 2000. Однако вы можете позаимствовать эту утилиту из Windows XP или Windows 2003 и разместить ее в $OEM$\$$\System32.

Ниже приводится пример, на основе которого мы будем разбираться подробнее. Используется скрипт, предоставленный bodro.

 

cmdow @ /HID
@echo off

SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET i=100

REG ADD %KEY% /V TITLE /D "Installing Applications" /f

REG ADD %KEY%\%i% /VE /D "Preparing Installation..." /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\prepare.cmd" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f
REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "Opera" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\Opera.exe /s" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "Download Master" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\Download_Master_4.4.3.947.exe" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "QIP" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\QIP.exe" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "Light Alloy" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\Light_Alloy.msi /passive" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "Importing Registry Tweaks" /f
REG ADD %KEY%\%i% /V 1 /D "REGEDIT /S %systemdrive%\install\regtweaks.reg" /f
SET /A i+=1

REG ADD %KEY%\%i% /VE /D "Cleaning Up and Rebooting" /f
REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\cleanup.cmd" /f
SET /A i+=1

EXIT

Сохраните файл как RunOnceEx.cmd в директории C:\XPCD\$OEM$\.

RunOnceEx.cmd в деталях

SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

Обозначает адрес в реестре HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx как переменную %KEY%. Делая это, мы избегаем необходимости указывать полный путь при каждом использовании команды REG ADD.

SET i=100

Задает порядковый номер раздела реестра в вышеприведенной ветке, в который будет импортироваться первый ключ.

REG ADD %KEY% /V TITLE /D "Installing Applications" /f

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

REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f

Обозначает название приложения или задания, которое выполняется. Будет отображаться в окне RunOnceEx. Т.е. вы меняете текст в кавычках в зависимости от исполняемого приложения. Переменная %i% в нашем случае равна 100.

REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f
REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f

Вы можете назначить несколько команд для приложения WinRar, используя /V 1, 2, 3. Как вы видите на скриншоте выше, маленькая стрелочка не передвинется к следующему приложению до тех пор, пока все команды текущего не будут выполнены. В данном примере первая строка устанавливает приложение, а вторая импортирует в реестр настройки WinRar при помощи заранее подготовленного *.reg файла. Все что нужно - это продублировать каждую строку REG ADD, но изменить нумерацию /V и текст, заключенный в кавычки. Для более подробной информации запустите команду REG ADD /? из командной строки.

SET /A i+=1

Увеличивает значение переменной %i% на единицу, обеспечивая импорт ключей следующего приложения в отличающийся от первого ключ.

cmdow.exe

Что такое cmdow @ /HID? Это утилита предназначенная для скрытия командой строки от глаз пользователя. Вы можете скачать cmdow.exe отсюда (14кб). Поместите cmdow.exe в директорию C:\XPCD\$OEM$\$$\System32\, чтобы утилита скопировалась в директорию Windows\System32 во время установки. Это позволит использовать утилиту из любой директории без указания прямого пути к ней.

Приложения, использующие кавычки

Вы заметите, что при добавлении дополнительных кавычек (" ") к значениям REG ADD, эти значения не импортируются в реестр. Чтобы обойти это препятствие используйте обратную косую черту (backslash) \" для каждых кавычек, которые вы добавляете. Пример:

%KEY%\%i% /V 1 /D "\"%systemdrive%\install\AdobeReader6\Adobe Reader 6.msi\" /qn" /f

Это позволит запускать приложения, которые содержат пробелы в именах файлов (надежнее, правда, переименовать их заранее), а также использовать ключи приложений, которые надо заключать в кавычки.

Prepare.cmd и Cleanup.cmd

Этот пункт необязателен. Вы можете использовать исполняемые файлы для выполнения задач, которые проще запустить отдельно, чем добавлять их в строки REG ADD в файле RunOnceEx.cmd. Чтобы увидеть как они запускаются, посмотрите пример файла RunOnceEx.cmd выше. В принципе, запуск их ничем не отличается от запуска других приложений и *.reg файлов.

Prepare.cmd может содержать все, что вы хотите выполнить

 

cmdow @ /HID

DEL "%systemroot%\*.bmp"
DEL "%systemroot%\Web\Wallpaper\*.jpg"
DEL "%systemroot%\system32\dllcache\*.scr"
DEL "%systemroot%\system32\*.scr"

DEL "%AllUsersProfile%\Start Menu\Windows Update.lnk"
DEL "%AllUsersProfile%\Start Menu\Set Program Access and Defaults.lnk"
DEL "%AllUsersProfile%\Start Menu\Windows Catalog.lnk"

EXIT

 

Если вы не понимаете, что делает данный файл, то не используйте его. Вкратце, он удаляет все обои и скринсэйверы, используемые в Windows по умолчанию, а также удаляет различные ярлыки из меню Пуск.

Cleanup.cmd может содержать команды для удаления ненужных директорий и перезагрузки компьютера после установки всех приложений.

 

cmdow @ /HID

shutdown.exe -r -f -t 30 -c "Windows XP will now restart in 30 seconds..."
net user aspnet /delete
RD /S /Q %systemdrive%\drivers\
RD /S /Q %systemdrive%\install\

EXIT

 

Вы можете объединить оба файла в один, без разницы.

Тестирование

RunOnceEx.cmd будет выполнен во время графического этапа установки Windows, когда до конца останется 12 минут. После перезагрузки и первого входа в систему RunOnceEx будет запущен, как показано на скриншоте в начале статьи.

Вы можете запустить файл RunOnceEx.cmd и посмотреть, что получается. Все что он делает - это импортирует ключи реестра в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\. Должно быть нечто подобное:

RunOnceEx Imported

Обратите внимание, что переменная %systemdrive% преобразовалась в букву системного диска С:\

После того, как вы убедитесь, что все правильно, удалите эти параметры. В противном случае при следующем входе в систему Windows попытается выполнить все команды. Если вы тестируете на виртуальной машине, то можете выполнить команду

rundll32.exe iernonce.dll,RunOnceExProcess

Команда инициализирует запуск RunOnceEx (перезагрузка не требуется). Естественно, все программы должны находиться в папках, соответствующих указанным в RunOnceEx.cmd путям.

Резюме

Преимущества использования RunOnceEx:


Ссылка: http://www.oszone.net/2762/