Выполнение команд
Выполнение команд
Существует еще одна интересная возможность, которую можно использовать при разработке файлов сценариев, — выполнение команд, записанных в ветви реестра. Для этого применяются функции библиотеки ADVPACK.dll. Например, после выполнения команды rundll32.exe ADVPACK.dll, UserInstStubWrapper «подраздел» система выполнит строку, содержащуюся в параметре строкового типа RealStubPath, расположенном в ветви реестра HKEY_LOCAL_MACHINE SOFTWAREMicrosoftActive SetupInstalled Components«подраздел» (по умолчанию параметр отсутствует). Одновременно плюсом и минусом данной команды является то, что программа, которую вы запустите после обработки содержимого параметра RealStubPath, будет запущена как процесс, то есть ей будет отказано во взаимодействии с Рабочим столом и она не сможет отобразить свое окно. Минус этого ясен, а плюс можно определить на примере. Если указать в параметре RealStubPath ветви системного реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftActive SetupInstalled Componentspara следующую команду: rundll32.exe amovie.ocx, RunDll /play /close e:musicB-2волки.wma, которая уже была описана в гл. 1, то после вызова команды rundll32.exe ADVPACK.dll, UserInstStubWrapper para будет воспроизведен данный музыкальный файл. При этом проигрывание данного файла можно будет прекратить только выгрузкой из памяти процесса rundll32.exe, который породил это воспроизведение, ведь никакого окна индикации открытого файла отображено не будет.
Можно также воспользоваться разновидностью приведенной выше команды — rundll32.exe ADVPACK.dll, UserUnInstStubWrapper «подкаталог». После ее вызова будет выполнена строка параметра RealStubPath, расположенного в ветви реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftActive SetupInstalled Components«подкаталог».Restore. Например, выполнение команды rundll32.exe ADVPACK.dll, UserUnInstStubWrapper para будет использовать параметр из ветви реестра HKEY_LOCAL_MACHINESOFTWARE MicrosoftActive SetupInstalled Componentspara.Restore.
Кроме функций библиотеки ADVPACK.dll, существует еще одна возможность запуска команд из реестра — использование ветви реестра HKEY_CURRENT_USER SoftwareMicrosoftWindowsCurrentVersionRunOnceEx (данная ветвь присутствует и в корневом разделе HKEY_LOCAL_MACHINE). По умолчанию ее содержимое выполняется только при следующем входе пользователя в систему, хотя существует возможность сказать системе, чтобы она обработала содержимое этой ветви немедленно. При этом все команды из ветви после своего выполнения автоматически удаляются. Следует также учитывать одну особенность ветви — если в ней будет определено несколько запусков программ, то все они будут запускаться последовательно. Сначала запустится первая программа, после того, как пользователь ее закроет, запустится вторая программа и т.д.
Формат содержимого данной ветви немного отличается от формата подобных ей ветвей, направленных на выполнение команд при входе пользователя в систему (например, ветви реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun). Каждая программа или команда, которая должна быть запущена, записывается в отдельный раздел данной ветви реестра — название раздела не имеет значения, но лучше последовательно пронумеровать эти разделы, чтобы система могла легко определить, какая программа должна запускаться первой. Параметр По умолчанию каждого раздела определяет название, которое будет отображаться в диалоге индикации установки при выполнении программы, определенной в соответствующем разделе реестра. При этом если параметр По умолчанию не определен, то в диалоге индикации не будет никакой информации о запуске данной программы или команды, хотя она будет запущена. Сама же программа или команда записывается в значении строкового параметра соответствующего раздела (название параметра не имеет значения). В разделе можно определить несколько команд, записав их в несколько строковых параметров, — все эти команды будут выполняться последовательно на данном шаге установки.
Чтобы лучше понять формат данной ветви реестра, рассмотрим один пример. Ниже в листинге приведен пример записей ветви реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceEx, экспортированных в REG-файл.
Листинг 2.1. Пример содержимого раздела реестра RunOnceEx
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceEx1]
@="Запуск cmd.exe и calc.exe"
"cmd"="cmd.exe"
"calc"="calc.exe"
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceEx2]
@="Запуск блокнотика"
"notepad.exe"="notepad.exe"
Допустим, содержимое приведенного листинга находится в реестре. Теперь нужно ввести команду rundll32.exe IERNONCE.dll, RunOnceExProcess. Она указывает системе, что та должна обработать содержимое ветви системного реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceEx. Результат обработки данной ветви можно увидеть на рис. 2.5.
Рис. 2.5. Способ работы запуска команд из ветви реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceEx
Как видно на рисунке, при запуске команды rundll32.exe появляется диалог индикации, в котором указано, какой шаг установки сейчас выполняется. При этом был запущен Калькулятор, так как при сортировке между названиями параметров в разделе 1 Калькулятор, судя по названию параметра, запускается первым. После того как вы закроете окно Калькулятора, будет открыто окно командного процессора. При этом индикатор будет все еще указывать на первый шаг, ведь еще не началась обработка содержимого следующего раздела ветви (раздела 2). После того как вы закроете окно командного процессора, будет запущен Блокнот, и при этом индикатор начнет указывать на второй шаг операции установки.
Если вы не укажете значений параметров по умолчанию ни в одном из разделов данной ветви реестра, то индикатор установки отображаться не будет. Тем не менее сами команды будут выполняться.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Двойное выполнение
Двойное выполнение Остается одна маленькая неприятность (кто сказал, что будет легко?). Поскольку мы устанавливаем событие onload для всех (оставшихся) браузеров, то init сработает дважды — в IE и Firefox. Чтобы это обойти, нам нужно сообщить функции, что она должна выполняться
if - Выполнение или не выполнение предложений в зависимости от условий
if - Выполнение или не выполнение предложений в зависимости от условий ifПозволяет выполнить или не выполняет определенные предложения в зависимости от заданного условияСинтаксис:if (condition) { statements}Аргументы:В целом, предложение if завершается закрывающей фигурной скобкой
Совместное выполнение команд
Совместное выполнение команд Простейшая командная конструкция — это выполнение команды в фоновом режиме, что вызывается вводом символа амперсанда после списка опций и (или аргументов):$ command [options] [arguments] & В Bash и Zsh пробел перед символом амперсанда не обязателен, но в
Выполнение AMANDA
Выполнение AMANDA Пакет AMANDA включает программное обеспечение как сервера, так и клиента. Серверные программы следует установить на компьютере, выполняющем функции сервера резервного копирования, а клиентские программы — на клиенте резервного копирования. Для
5.3. Выполнение команд
5.3. Выполнение команд Как было отмечено выше, одна из основных функций оболочки состоит в том, чтобы организовать исполнение команд пользователя, вводимых им в командной строке. В частности, оболочка предоставляет пользователю два специальных оператора для организации
Выполнение файлов
Выполнение файлов Теперь рассмотрим несколько команд для выполнения или регистрации файлов. Например, как можно установить INF-файл с помощью команды rundll32.exe? Для этого применяется несколько команд, каждая из которых предназначена для отдельной версии INF-файлов.Чтобы
Выполнение команд
Выполнение команд До сих пор мы только указывали свойства и параметры объекта Command, но не выполняли эти команды. Существует три стандартных способа выполнения команд для объекта Command и один способ для объекта SqlCommand.• Метод ExecuteNonQuery. Выполняет команду SQL и не возвращает
2.1. Выполнение SQL-команд
2.1. Выполнение SQL-команд Прежде чем выполнять SQL-команды, необходимо подключиться к работающему серверу MySQL (как это сделать, рассказывалось в главе 1). В этом разделе вы узнаете, как создавать SQL-команды и передавать их серверу для выполнения.Если вы используете командную
Генерирование SQL-команд с помощью типов построителя команд
Генерирование SQL-команд с помощью типов построителя команд Вы должны согласиться с тем, что для работы с адаптерами данных может потребоваться ввод довольно большого объема программного кода, а также создание всех четырех объектов команд и соответствующей строки
Выполнение и оптимизация
Выполнение и оптимизация При разработке игр с помощью программы Flash всегда возникает вопрос о скорости. До пятой версии Flash язык программирования был недостаточно эффективным и не позволял создавать многие игры. Но даже версия 5 была довольно медленной. Достаточно
16.3. Выполнение сценария
16.3. Выполнение сценария Ниже рассматривается пример, который уже обсуждался ранее. В данном случае, файл называется cleanup.$ pg cleanup#!/bin/sh#имя: cleanup#это общий сценарий, выполняющий очистку echo "starting cleanup…wait"rm /usr/local/apps/log/*.logtail -40 /var/adm/messages /tmp/messagesrm /var/adm/messagesmv /tmp/messages /var/adm/messages echo
18.7.6. Выполнение суммирования
18.7.6. Выполнение суммирования Довольно часто приходится сталкиваться с задачей считывания информации из файла и выполнения суммирования по определенным столбцам, содержащим числа. Предположим, в файле total.txt находятся данные о продажах отделами stat и gift..$ pg
Переадресация команд: применение переадресации команд для непосредственного выполнения скриптов и каналов
Переадресация команд: применение переадресации команд для непосредственного выполнения скриптов и каналов Переадресация (перенаправление) команд – одна из наиболее полезных возможностей протокола SSH. Она вытекает из его основополагающих принципов построения, когда