Введение в SMS Installer Script Editor

Журнал "Windows 2000 Magazine" , #02/2000
Брэд Эллиот

Создавать установочные пользовательские пакеты администраторы сети могут с помощью Microsoft Systems Management Server (SMS) Installer, который поставляется в составе SMS 2.0. Работая с мастером Installation Expert, они получают доступ к функциям графического интерфейса, обеспечивающим контроль над большинством задач процесса установки, включая установку файлов, создание значков и изменение параметров реестра. Тем не менее, хотя Installation Expert неплохо справляется со своими обязанностями, наиболее полно возможности SMS Installer раскрываются при работе с редактором сценариев Script Editor. Это более эффективное средство для формирования установочных пакетов, предоставляющее дополнительные возможности, которых нет у мастера. Например, если администратор планирует использовать в своих пакетах операторы условного перехода (скажем, конструкцию if...then), он сможет внести их в базовый сценарий с помощью редактора. Тех же читателей, кого сама мысль о предстоящем изучении очередного сценарного языка повергает в уныние, могу успокоить: работа редактора сценариев основана на графическом интерфейсе и базируется на самых простых концепциях программирования.

Знакомимся с редактором сценариев

Система графического интерфейса Script Editor, доступ к которому осуществляется из меню View, состоит из двух панелей. На левой панели размещен список всех возможных действий (конкретных команд или операций), которые может выполнять установочный пакет.

ЭКРАН 1. Вид окна Script Editor.

К числу наиболее распространенных операций относятся установка переменных среды, установка файлов, создание значков и изменение реестра. На правой панели, как показано на Экране 1, отображается активный сценарий. В верхней части окна расположена строка меню и панель инструментов, включающие привычные команды File и Edit, а также набор типовых команд сценария.

Простейший метод создания установочного пакета - автоматическая генерация базового сценария с помощью входящего в состав Installation Expert мастера переупаковки (repackage wizard). Если после создания пакета перейти в окно редактора сценариев, в правой панели окна появится текст сценария, описывающего все запланированные мастером действия. Каждая строка сценария будет соответствовать одной операции.

Примерно 40 или 50 первых строк выполняют такие подготовительные операции, как объявление переменных и определение структуры диалоговых окон мастера. Ни в коем случае не следует менять или удалять эти строки, поскольку они закладывают основу для работы сценария. Например, если установочный пакет отображает в ходе инсталляции процесс выполнения установки, сценарий не будет компилироваться без команды Check Disk Space (контроль дискового пространства).

Если для создания установочного пакета использовался мастер, сценарий будет содержать целый ряд команд Install File (установка файла), каждая из которых соответствует операции копирования конкретного файла установочного пакета на клиентский компьютер. В заключительной части сценария, вероятнее всего, появится несколько команд Create Shortcut (создание значка) и Edit Registry (редактирование реестра), хотя, конечно, это зависит от типа устанавливаемого приложения.

Существует несколько способов добавить в сценарий дополнительные команды. Самый простой метод - "перетащить" их мышью с левой панели на правую, в нужный раздел сценария. Хотя Script Editor использует текстовый язык сценариев, работа с командами ведется с помощью диалоговых окон. При добавлении или изменении команды появляется диалоговое окно редактирования, включающее такие стандартные элементы управления, как флажки и раскрывающиеся меню.

Переменные

Одной из наиболее полезных особенностей SMS Installer является возможность автоматического использования переменных для обозначения типовых каталогов. Например, в процессе создания установочного пакета для компьютера с операционной системой Windows 9x, файлы которой размещены в каталоге C:\Windows\ System, SMS Installer заменит все ссылки на эту папку переменной SYS. Установщик достаточно "интеллектуален" - если установить данный пакет на компьютер с операционной системой Windows NT, файлы будут скопированы туда, куда нужно - в каталог \Winnt\System32. Точно так же установочный пакет может помещать значки в профиль занимающегося установкой пользователя, а не копировать их в какой-то общий каталог.

Те, кто разбирается в вопросах редактирования реестра, могут с помощью этой методики сделать свои пакеты более надежными. Предположим, требуется установить встраиваемую библиотеку для пользователей Microsoft Internet Explorer (IE). Конечно, мастер способен создать установочный пакет, который скопирует библиотеку в каталог Program Files\ Internet Explorer\Plugins. Этот пакет будет работать в большинстве случаев, однако если IE установлен, например, в каталоге D:\IE4 или C:\Program Files\Plus!\Microsoft Internet, то запустить пакет не удастся.

ЭКРАН 2. Определение месторасположения Internet Explorer.

Чтобы DLL случайно не был установлен не в тот каталог, можно, как показано на Экране 2, выяснить имя каталога IE с помощью команды Get Registry Key Value, которая скопирует его из соответствующего ключа реестра в заданную переменную.

ЭКРАН 3. Задание пути для копирования файлов с помощью переменной IEPATH.

Имя этой переменной, например IEPATH, можно использовать в ходе установки файлов (см. Экран 3). Путь к каталогу IE указан в одном из параметров раздела реестра HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\IE Setup\Setup (см. Экран 2). Скопировав значение этого параметра в переменную IEPATH, можно воспользоваться командой копирования файла библиотеки в каталог %IEPATH%\ Plugins. Такой подход гарантирует, что установочный пакет будет работать у всех пользователей независимо от того, где на их компьютерах установлен Internet Explorer.

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

Условные операторы

Каждый, кто когда-либо занимался программированием, понимает, насколько важна конструкция if...then. Не удивительно, что операторы условного перехода оказались востребованными большинством пользователей SMS Installer. Они могут пригодиться для решения, например, такой задачи, как настройка пакета в зависимости от типа операционной системы. Кроме того, эти средства помогут завершить процесс установки в случае отсутствия в системе некоторого приложения или выполнить различные действия в зависимости от учетной записи пользователя.

ЭКРАН 4. Использование специальных операторов.

В конструкциях If/While можно применять специальные операторы (например, Equals, Contains), позволяющие сравнивать переменную с заданным значением (см. Экран 4). Сценарий будет использовать результат сравнения для запуска блока If или цикла While, внутри которого описаны операции, подлежащие выполнению при удовлетворении условия. Условная конструкция завершается командой End Block.

К числу условных операторов можно отнести и ряд других команд. Например, команда проверки конфигурации Check Configuration изменяет ход исполнения сценария в зависимости от того, какая именно система используется. По сути, она играет роль блока If, который реализует, например, такой алгоритм: "Если на компьютере установлена операционная система Windows 95, прекратить установку пакета". Те администраторы, которые планируют применять SMS для дистрибуции своих пакетов, должны помнить о том, что SMS способен проверять соответствие большинству условий, предъявляемых к конфигурации, например не разрешать запуск пакетов на компьютерах, где установлена не Windows NT или Windows 9x, а какая-либо иная система. Для формирования альтернативных ветвей выполнения следует добавить к блоку If условный оператор Else, и следующие за ним команды будут выполняться в случае, когда условие оператора If не соблюдается. Например:

If <условие>
    <команда1>
Else
   <команда2>
End Block

Другие полезные команды и переменные

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

Delete File(s). Хотя мастер позволяет устанавливать файлы на пользовательскую систему, он не располагает средствами удаления существующих файлов. Для этого можно применить команду Delete File(s) (удалить файл(ы)) редактора сценариев.

ЭКРАН 5. Задание файла для удаления.

Предположим, требуется создать приложение для "уборки мусора" в системе. При этом желательно, чтобы пакет предотвращал автоматический запуск программы Microsoft Find Fast (из папки автозагрузки). Для этого, как показано на Экране 5, нужно добавить в сценарий команду Delete File, которая сообщит приложению, в каком каталоге находится удаляемый значок. Чтобы описать местонахождение файла, можно использовать либо собственную переменную, которую надо предварительно объявить, либо стандартную переменную SMS Installer STARTUPDIR.

При описании перечня удаляемых файлов разрешено применять символы шаблона, что однако запрещается при работе с системными каталогами \Windows и \Winnt\System32. Кроме того, диалоговое окно команды Delete File(s) содержит ряд флажков, позволяющих удалять каталоги и файлы во вложенных каталогах.

В некоторых версиях SMS Installer режимы работы с каталогами и удаления вложенных каталогов могут функционировать неправильно. О том, как решать подобные проблемы, рассказано в статье Microsoft "SMS: Remove Directory Containing Files Option in 'Delete Files' Script Item Not Functioning Properly", которую можно найти по адресу: http://support.microsoft.com/support /kb/articles/q235/7/48.asp. Более подробные сведения о программных "заплатках" для SMS Installer приведены в статье "SMS Installer Fixes". Указанные ошибки в работе команды Delete File(s) полностью исправлены в версии SMS Installer 2.0.91.00, в которую также включены средства отладки и целый ряд новых команд, в том числе для управления цветом.

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

Допустим, для определения порядка дальнейших действий сценарию необходимо "знать" номер версии установленного приложения. Предположим также, что известен параметр реестра, который описывает этот номер (например, 2.0.1.b или 3.0.5a). Если необходим только основной номер версии (например, 2.х или 3.х), можно обрезать строку с полным номером и вернуть в сценарий только первый его символ. Для этого с помощью параметра Split value команды Parse String нужно выбрать режим разбора строки слева, а параметру Pattern/Position присвоить значение 1. В результате команда извлечет из строки первый символ с номером версии и поместит его в указанную переменную. После этого можно использовать условный оператор для организации ветвления сценария в зависимости от значения переменной.

Include Script. Если есть желание создавать сценарии по модульному принципу, чтобы лучше структурировать их, можно воспользоваться командой включения сценария Include Script. Как следует из названия, команда вставляет в исполняемый сценарий файл другого сценария. Например, SMS Installer пользуется данной командой для включения в пакет функций удаления устанавливаемого приложения. Для этого SMS Installer вставляет в сценарий файл uninstal.ipf, который копирует файл соответствующей утилиты удаления и записывает необходимые параметры в реестр. Это позволяет удалить установленное приложение с помощью значка Add/Remove Programs панели управления. Клиенты SMS могут использовать эту возможность для автоматического удаления приложения, публикацию которого SMS больше не поддерживает.

RESTART. Обычно, когда сценарий выполняет такие команды, как замена системного файла или модификация файла autoexec.bat, установочный пакет предлагает пользователю перезагрузить систему после завершения установки. Для регулирования этого процесса используется переменная RESTART, которая определяет, будет ли пакет выполнять перезагрузку. Если данной переменной присвоить пустое значение, перезапуска не будет. Чтобы реализовать эту возможность, в конец сценария следует добавить команду Set Variable, присваивающую переменной RESTART значение ' ' (пробел). При этом важно помнить, что многие приложения могут неправильно работать до перезагрузки системы. Однако если SMS используется для одновременного развертывания целого ряда приложений, лучше отложить перезагрузку до завершения установки последнего из них.

Кроме того, можно использовать переменную RESTART для выполнения принудительной перезагрузки после установки пакета, который не требует перезапуска системы. Для этого нужно присвоить RESTART значение S. Кроме того, если выполняется дистрибуция инсталляционного пакета, то можно сконфигурировать программные настройки SMS таким образом, чтобы перезагрузка осуществлялась автоматически без использования переменной RESTART.

"Уборка мусора"

Независимо от того, с чем работает пользователь - с редактором сценариев или с мастером, - перед развертыванием установочных пакетов обязательно нужно производить "уборку мусора": просматривать список устанавливаемых пакетом файлов, удалять файлы в корзине и файлы, которые создают различные сервисные процедуры (например, журналы SMS или антивирусных программ). Хотя в процессе обновления пакета можно определить ограничения, препятствующие появлению подобных файлов, двойной контроль никогда не помешает.

Порой возникает необходимость удаления файлов и параметров реестра, относящихся к конкретному пользователю. Так, если мастер обновления пакетов запущен в сеансе работы пользователя jsmith, не исключено, что он запишет изменения реестра в раздел HKEY_USERS\jsmith или включит установленные файлы в профиль jsmith.

Если при развертывании установочного пакета пользователь предусматривает возможность его удаления, установщик добавит в реестр раздел Uninstall, который используется значком Add/Remove Programs панели управления. Если пакет предназначен для приложения, которое уже поддерживает режим удаления, следует убрать из меню Start значок программы Uninstall, чтобы исключить возможность доступа к двум разным методам удаления.

Работая с редактором сценариев SMS Installer, пользователь имеет в своем распоряжении более мощный и гибкий набор средств, чем при работе только с мастером. С помощью условных операторов и переменных, можно создавать надежные пакеты дистрибуции приложений, одновременно обеспечивая строгий контроль за изменениями конфигурации клиентских систем.