Windows run once key

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

Посетителей: 9517 | Просмотров: 17104 (сегодня 0) Шрифт:

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

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

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

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

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

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

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

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

  • %SystemDrive%, если выполняется установка приложений, скопированных на жесткий диск
  • %DiskRoot%, если выполняется установка приложений с USB- или установочного DVD-диска

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

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

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

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

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

REG ADD %KEY% /V TITLE /D «Установка приложений» /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 /? из командной строки.

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

Читайте также:  Skype для ноутбука windows 10

После выполнения файла 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.

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

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

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

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

Читайте также:  Не убиваются процессы linux

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

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

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

Run and RunOnce Registry Keys

Run and RunOnce registry keys cause programs to run each time that a user logs on. The data value for a key is a command line no longer than 260 characters. Register programs to run by adding entries of the form descriptionstring=commandline. You can write multiple entries under a key. If more than one program is registered under any particular key, the order in which those programs run is indeterminate.

The Windows registry includes the following four Run and RunOnce keys:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

By default, the value of a RunOnce key is deleted before the command line is run. You can prefix a RunOnce value name with an exclamation point (!) to defer deletion of the value until after the command runs. Without the exclamation point prefix, if the RunOnce operation fails the associated program will not be asked to run the next time you start the computer.

By default, these keys are ignored when the computer is started in Safe Mode. The value name of RunOnce keys can be prefixed with an asterisk (*) to force the program to run even in Safe mode.

A program run from any of these keys should not write to the key during its execution because this will interfere with the execution of other programs registered under the key. Applications should use the RunOnce key only for transient conditions, such as to complete application setup. An application must not continually recreate entries under RunOnce because this will interfere with Windows Setup.

RunOnce Registry Key

All versions of Windows support a registry key, RunOnce, which can be used to specify commands that the system will execute one time and then delete.

In WindowsВ 8 and WindowsВ 8.1, RunOnce entries for installation of software-only SWENUM devices are processed during device installation. Other RunOnce entries are added to the RunOnce key. These are applied the next time the system processes the RunOnce key. Device installation does not force the system to process RunOnce entries.

In WindowsВ 7 and previous versions, immediately after a device is installed, Windows executes the command stored under the RunOnce key and then removes the key. Additionally, each time the system starts, it executes the command stored under the RunOnce key and then removes the key. Therefore, if you put a command under the RunOnce key, you cannot easily predict when it is executed.

Immediately after a device has been installed, Windows executes the command stored under the RunOnce key and then removes the key. Additionally, each time the system starts, it executes the command stored under the RunOnce key and then removes the key. Therefore, if you put a command under the RunOnce key, you cannot easily predict when it is executed.

Читайте также:  Punto switcher mac os big sur ��� ����������

For device installations, RunOnce registry keys can be created by using add-registry-sections, which are specified through INF AddReg directives. Each add-registry-section has the following syntax:

reg-root, [subkey], [value-entry-name], [flags], [value]

The registry root (reg-root) and subkey values for the RunOnce registry key are as follows:

HKLM, «Software\Microsoft\Windows\CurrentVersion\RunOnce»

The value-entry-name string is omitted from a RunOnce registry entry. The type of the entry, which is indicated by the Flags value, must be either REG_SZ (Flags value of 0x00000000) or REG_EXPAND_SZ (Flags value of 0x00010000). For an entry of type REG_SZ (the default), the Flags value can be omitted.

The value parameter in a RunOnce key specifies the command to be executed. This parameter is a quoted string that has the following format:

By default, a RunOnce key is deleted after the specified command is executed. You can prefix a RunOnce key value parameter with an exclamation point (!) to defer deletion of the key until after the command runs successfully. Without the exclamation point prefix, if the specified command fails, the RunOnce key will still be deleted and the command will not be executed the next time that the system starts.

Also, by default, the RunOnce keys are ignored when the system is started in Safe Mode. The value parameter of RunOnce keys can be prefixed with an asterisk (*) to force the command to be executed even in Safe Mode.

Consider the following guidelines when you create a value string entry:

Rundll32 can appear either with or without its .exe file name extension.

DllName is the full path of a DLL or executable image. Except for a required terminating comma, the expression must not otherwise contain any commas. If no file name extension is supplied, the default extension is .dll.

EntryPoint is the name of the entry point within the DLL indicated by DllName.

Arguments is an optional substring that contains any arguments that must be passed to the specified DLL.

Exactly one space must separate the EntryPoint string from the Arguments substring.

The following code example shows the add-registry-section entry that stores a command and its arguments under the RunOnce key:

The following rules apply when you use RunOnce registry keys for device installations:

These registry keys must be used only for installations of software-only devices that are enumerated by SWENUM, the software device enumerator.

RunOnce keys must consist only of calls to Rundll32.exe. Otherwise, WHQL will not digitally sign the driver package.

The code to be executed must not prompt for user input.

Server-side installations execute in a system context. For this reason, you must be certain that the code to be executed contains no security vulnerabilities and that file permissions prevent the code from being maliciously modified.

Starting with Windows Vista, the system will not execute the commands specified by the RunOnce keys if a user without administrator privileges is logged on to the system. This could lead to incomplete or corrupted installations following a system restart.

Before the device installation application creates the RunOnce entries, it informs the current user that a user who has administrator privileges must log on after a system restart.

Оцените статью