Установка приложений способом RunOnceEx в Windows Vista

OSzone.net » Microsoft » Автоматическая установка » Автоматическая установка Windows Vista и новее » Установка приложений способом RunOnceEx в Windows Vista
Автор: Вадим Стеркин
Иcточник: www.oszone.net
Опубликована: 11.06.2009

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

*

В Windows Vista на смену RunOnceEx пришли FirstLogonCommands, которые также выполняются при первом входе пользователя в систему. Однако вы можете, как и прежде, воспользоваться способом RunOnceEx с минимальными изменениями. В этой статье рассматривается установка приложений способом RunOnceEx с USB- или установочного DVD-диска. Если для установки приложений вы используете $OEM$ папки, вам понадобится изменить пути в коде командного файла.

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

На этой странице

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

Сначала создается командный файл RunOnceEx.cmd, основным назначением которого является импорт записей в системный реестр. Приложения, которые необходимо установить, и команды для их установки указываются в виде параметров реестра. Импорт параметров в реестр осуществляется до первого входа пользователя в систему. А при первом входе начинается выполнение всех указанных команд. Команды выполняются последовательно, причем следующая команда начинает выполняться только после завершения предыдущей.

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

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

Далее разбирается второй вариант, поэтому, если вы взяли его на вооружение, не забудьте создать переменную %DiskRoot%, следуя статье Создание переменной среды, соответствующей букве установочного диска.

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

cmdow @ /HID
@echo off

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

REG ADD %KEY% /V TITLE /D "Установка приложений" /f
REG ADD %KEY%\%i% /VE /D "WinRar" /f
REG ADD %KEY%\%i% /V 1 /D "%DiskRoot%\install\WinRar.exe /s" /f
REG ADD %KEY%\%i% /V 2 /D "REGEDIT /S %DiskRoot%\install\rar_set.reg /s" /f
SET /A i+=1

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

REG ADD %KEY%\%i% /VE /D "Импорт параметров реестра" /f
REG ADD %KEY%\%i% /V 1 /D "REGEDIT /S %DiskRoot%\install\regtweaks.reg" /f
SET /A i+=1

EXIT

RunOnceEx.cmd в подробностях

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

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

SET i=100

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

REG ADD %KEY% /V TITLE /D "Установка приложений" /f

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

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

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

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

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

SET /A i+=1

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

После выполнения файла RunOnceEx.cmd в реестр будут внесены команды, как показано на скриншоте ниже.

*
Увеличить рисунок

cmdow.exe

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

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

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

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

%KEY%\%i% /V 1 /D "\"%DiskRoot%\install\My Program.msi\" /qn" /f

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

Размещение и запуск файла RunOnceEx.cmd

Если в коде файла RunOnceEx.cmd используется кириллица, его необходимо сохранять в кодировке DOS-866. Для запуска файла в ходе установки Windows Vista его можно включить в состав установочного диска (статья Добавление файлов в дистрибутив Windows Vista вам в этом поможет) или съемного USB-диска. Где конкретно разместить файл, описано в этом разделе статьи.

Чтобы установить приложения при первом входе в систему из раздела реестра RunOnceEx, необходимо выполнить файл RunOnceEx.cmd и инициализировать выполнение команд, внесенных в реестр. Сделать это можно двумя способами:

Однако применительно к RunOnceEx эти способы несколько различаются, поэтому я рассмотрю этот момент подробнее.

Различия между способами запуска RunOnceEx.cmd

*Файл SetupComplete.cmd выполняется до первого входа пользователя в систему, поэтому при первом входе команды RunOnceEx будут инициализированы автоматически. Однако выполнение команд будет осуществляться от имени вошедшего в систему пользователя, что означает появление запросов контроля учетных записей (UAC). Избежать появления запросов UAC можно, используя для первого входа в систему встроенную учетную запись Администратор (см. Создание учетных записей и настройка автоматического входа в систему), либо отключив UAC.

Команды, указанные в разделе файла ответов FirstLogonCommands, выполняются после первого входа в систему. Поэтому выполнение команд RunOnceEx необходимо инициализировать дополнительной командой (о ней чуть ниже). Если вход в систему выполняет любая учетная запись с правами администратора, FirstLogonCommands выполняются с автоматическим повышением прав, что позволяет избежать запросов UAC.

Таким образом, для полной автоматизации установки программ способом RunOnceEx необходимо либо использовать FirstLogonCommands, либо заранее отключать UAC в случае использования SetupComplete.cmd.

Использование SetupComplete.cmd

Если вы решили задействовать файл SetupComplete.cmd, можете просто перенести в него команды из файла RunOnceEx.cmd. Альтернативным способом будет размещение файла в папке Install в корне установочного или съемного диска и его вызов с помощью команды CALL.

call %DiskRoot%\Install\RunOnceEx.cmd

В принципе, неважно, где размещать файл. Важно лишь правильно указать к нему путь при вызове.

Использование FirstLogonCommands

Поскольку команды выполняются после входа пользователя в систему, автоматической инициализации RunOnceEx не произойдет. Однако этого можно добиться, добавив в конце файла RunOnceEx.cmd команду:

rundll32.exe iernonce.dll,RunOnceExProcess

То есть сначала команды вносятся в реестр, затем запускается процесс RunOnceEx. Остается лишь сконфигурировать выполнение файла RunOnceEx.cmd в файле ответов. Для этого достаточно добавить одну синхронную команду к проходу 7 oobeSystem и, если вы используете другие команды, задать ей самый большой порядковый номер выполнения. В этом случае последняя синхронная команда запустит файл RunOnceEx.cmd и инициализирует выполнение команд из раздела реестра RunOnceEx. Пример синхронной команды, запускающей файл с USB- или DVD-диска, приводится ниже.

cmd /c %DiskRoot%\Install\RunOnceEx.cmd

Добавление синхронных команд описано здесь.

Примечание об отображении окна RunOnceEx

В отличие от Windows XP, в Windows Vista окно RunOnceEx не отображается при первом входе в систему - вы видите на экране системное сообщение "Подготовка рабочего стола". Однако если нажать CTRL+SHIFT+ESC, то запустится диспетчер задач, а заодно - станет видимым окно RunOnceEx.

Заключение

Как и в случае с Windows XP, по окончании установки Windows Vista можно выполнять установку приложений способом RunOnceEx. Если у вас имеется файл RunOnceEx.cmd, его можно легко адаптировать к использованию в Windows Vista.


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