Kochurov.Narod.Ru

Персональная страница Александра Кочурова

Обо мне
Публикации
Разработки
Разное
Главная страница/Публикации/Windows Script Components: Курс молодого бойца
Windows Script Components: Курс молодого бойца

Пример создания и использования Windows Script Components

(c) 2003 Кочуров А.Л.

Windows Script Components. Что это такое и зачем они нужны?

Сервер сценариев Windows (Windows Script Host, WSH), являющийся начиная с Windows 2000 частью операционной системы, и доступный также для более ранних версий Windows, позволяет пользователю выполнять скрипты (сценарии), написанные на таких языках, как Visual Basic Script (VBScript) и JavaScript (JScript). Эта возможность по достоинству оценена продвинутыми пользователями и администраторами - WSH позволяет исполнять полноценные программы, написанные на объектно-ориентированных языках высокого уровня, а наличие большого количества зарегистрированных  в системе OLE-объектов дает скриптам большие возможности по управлению компьютером и установленными на нем приложениями.

Эти OLE-объекты (точнее, Automation-серверы, а еще точнее COM-серверы с интерфейсом IDispatch) представляют собой приложения в виде DLL, EXE, OCX - файлов. Такие компоненты разрабатываются на Visual Basic, С++, Delphi и подобных компилируемых языках, то есть для их создания нужно иметь соответствующий компилятор.

Однако с появлением технологии Windows Script Components (WSC) у разработчиков появилась возможность создания регистрируемых в системе Automation-серверов, написанных на упомянутых выше скриптовых языках, которые будут работать на любой машине, где установлен WSH. Для разработки не нужны специальные среды разработки и компиляторы - WSC представляет собой обычный текстовый файл, содержащий XML-разметку.

Таким образом, достоинства WSC следующие: удобство, быстрота и простота разработки (для разработки достаточно лишь иметь текстовый редактор типа Notepad.) Кроме того, они весьма компактны и не требуют наличия библиотек времени выполнения (runtime) компилятора.

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

Следовательно, использовать WSC имеет смысл в тех случаях, когда скрипт может реализовать требуемую функцию, быстродействие не критично и нет смысла разрабатывать компоненты на компилируемых языках. WSC также более удобны в отладке чем компилируемые компоненты - изменения вносятся прямо в исходный код и не требуют перекомпиляции. Традиционные области применения WSC - создание компонент, выполняющихся на web-серверах, встроенные в HTML-страницу компоненты, и написанные под конкретную задачу штучные "произведения", не предназначенные для широкого распространения. Вообще, WSC - бальзам на душу поборников всего лицензионного - если у вас Windows лицензионная, то и WSC - тоже :).

Чтобы не быть голословным в описании достоинств WSC, я портировал в этот формат из VB6 свою разработку - компоненту V7Backup, предназначенную для автоматизации резервного копирования информационных баз системы 1С:Предприятие 7.7. Дальнейшая часть статьи представляет собой описание шагов, необходимых для создания WSC на примере реального класса, входящего в состав V7Backup - класса V7Backup.Mail. Этот класс имеет следующие свойства и методы:

Свойства класса V7Backup.Mail
 

Свойство Описание Доступ Значение по умолчанию
Address Поле "Кому" письма Чтение/Запись ""
Body Текст (тело) письма Чтение/Запись ""
CanWork Истина, если объект нормально функционирует и почта может быть отправлена Чтение  
From Поле "От" письма Чтение/Запись ""
SMTPPassword Пароль пользователя SMTP-сервера Чтение/Запись ""
SMTPPort Порт SMTP Чтение/Запись 25
SMTPServer SMTP-сервер для отправки почты Чтение/Запись ""
SMTPUserName Имя пользователя SMTP-сервера Чтение/Запись ""
Subject Тема письма Чтение/Запись ""


Методы класса V7Backup.Mail
 

Метод Описание Аргументы Возвращаемое значение
AddAttachment Прикрепляет указанный файл к письму в качестве вложения FilePath Нет
Reset Очистка тела письма и удаление вложений Нет Нет
Send Отправка письма Нет Нет

Забегая вперед, следует заметить, что создваемый нами объект будет представлять "обертку" для класса CDO.Message, относящегося к Collaboration Data Objects (CDO 2000). CDO 2000 является составной частью Windows, начиная с Windows 2000, поэтому в более ранних версиях ОС наш объект работать не будет, о чем и уведомит значением свойства CanWork=False.

До начала работы следует посетить раздел сайта Microsoft, посвященный скриптовым технологиям - http://www.microsoft.com/scripting и скачать оттуда последнюю версию WSH (5.6 на момент написания статьи), документацию по WSH (на английском языке), и самое главное - Windows Script Component Wizard - инструмент, позволяющий выполнить рутинную работу по созданию WSC.

Далее мы пройдем все шаги с применением WSC Wizard по созданию "скелета" класса и опишем дальнейшие ручные операции по его корректировке и добавлению необходимой функциональности. Разобьем условно создание компоненты на три шага: создание заготовки компоненты с помощью мастера, корректировка созданной заготовки, добавление функциональности.

Шаг 1. Создание заготовки компоненты с помощью мастера

Запустим Windows Script Component Wizard и заполним первую страницу как показано на рисунке:

Расположение результирующего файла (Location) можно указать любое.

На следующей странице указывается язык, на котором будет написан WSC, поддержку специальных возможностей включать не надо. На первоначальном этапе отладки имеет смысл установить флажок "Error checking" тогда при регистрации компоненты будет проверяться ее синтаксис, а после окончания разработки эту опцию отключить.

Далее заполняются свойства в соответствии с таблицей свойств объекта V7Backup.Mail.

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

На этом создание заготовки компоненты можно считать завершенным.

Шаг 2. Корректировка созданной заготовки

Откроем полученный файл MailObj.wsc любым текстовым редактором, например Notepad'ом. Мы увидим обычный XML- файл с достаточно прозрачной структурой, которая хорошо описана в документации по WSC, поэтому нет смысла здесь описывать ее еще раз. Внесем в полученный файл небольшие правки. Во первых, нужно указать кодировку XML-файла как кириллическую, иначе мы не сможем написать в нем ни одного слова на великом и могучем:

<?xml version="1.0" encoding="windows-1251"?>

Далее, все объявленные нами методы не возвращают никаких значений, то есть в терминологии Visual Basic являются процедурами. Мастер объявил их для нас как функции, возвращающие значения:

function AddAttachment(FilePath)
AddAttachment = "Temporary Value"
end function 

Мы должны все три функции объявить как процедуры:

sub AddAttachment(FilePath)

end sub

Шаг 3. Добавление функциональности

В начало скрипта перед сгенерированным мастером объявлением и инициализацией переменных добавим опцию Option Explicit, означающую, что все используемые переменные должны быть обязательно объявлены, и константы CDO:

Option Explicit

' Константы CDO
Private Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing"
Private Const cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword"
Private Const cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername"
Private Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
Private Const cdoSMTPAuthenticate =  _ 
			"http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
Private Const cdoSMTPConnectionTimeout = _ 
			"http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
Private Const cdoSMTPServerPort =  _
			"http://schemas.microsoft.com/cdo/configuration/smtpserverport"
Private Const cdoSendUsingPort = 2
Private Const cdoBasic = 2

Далее, после объявления и инициализации переменных добавим объявление, создание и проверку объекта CDO.Message:

Private oCDOMsg ' Ссылка на объект CDO.Message

On Error Resume Next
Set oCDOMsg = Nothing
Set oCDOMsg = CreateObject("CDO.Message")
CanWork = Not (oCDOMsg Is Nothing)

И в конце скрипта заполним тела процедур, реализующих методы:

sub AddAttachment(FilePath)
' Добавляет вложение к письму
On Error Resume Next
If Not CanWork Then Exit Sub
oCDOMsg.AddAttachment FilePath 
end sub

sub Reset()
'Очищает тело письма и удаляет вложения
On Error Resume Next
Body = ""
oCDOMsg.Attachments.DeleteAll ' удаляем все вложения
oCDOMsg.Configuration.Fields.Update 
end sub

sub Send()
' Отправляет письмо.
On Error Resume Next
If Not CanWork And Address <> "" Then Exit Sub ' с пустым адресом отправлять не будем 
oCDOMsg.From = From
oCDOMsg.To = Address
oCDOMsg.Subject = Subject
oCDOMsg.Textbody = Body

oCDOMsg.Configuration.Fields.Item(cdoSendUsingMethod) = cdoSendUsingPort
oCDOMsg.Configuration.Fields.Item(cdoSMTPConnectionTimeout) = 10
oCDOMsg.Configuration.Fields.Item(cdoSMTPAuthenticate) = cdoBasic
oCDOMsg.Configuration.Fields.Item(cdoSendPassword) = SMTPPassword
oCDOMsg.Configuration.Fields.Item(cdoSendUserName) = SMTPUserName
oCDOMsg.Configuration.Fields.Item(cdoSMTPServer) = SMTPServer
oCDOMsg.Configuration.Fields.Item(cdoSMTPServerPort) = SMTPPort

oCDOMsg.Configuration.Fields.Update
oCDOMsg.Send 
end sub

Все, создание WSC завершено!

Регистрация и проверка функционирования WSC

Для регистрации WSC следует открыть Проводник Windows, найти там WSC-файл, и щелкнуть по нему левой кнопкой мыши. В появившемся контекстном меню выбрать пункт "Подключить". Аналогично осуществляется и отключение компоненты.

После регистрации можно написать небольшой скрипт для проверки функционирования объекта. Например, такой (адреса в примере вымышленные, необходимо подставить свои):

set m = CreateObject("V7Backup.Mail")
m.From = "V7Backup@coolcompany.ru"
m.Address = "admin@coolcompany.ru"
m.SMTPServer = "mail.coolcompany.ru"
m.Subject = "Проверка связи"
m.Body = "Привет"
m.Send
m.Reset
m.AddAttachment "C:\MailObj\Send.vbs"
m.Send

Скрипт отправит два письма с темой "Проверка связи". У первого в теле письма будет написано "Привет", а у второго тело будет пустое (сработает метод Reset) но оно будет иметь прикрепленный файл Send.vbs (разумеется он должен существовать по указанному в вызове метода AddAttachment пути).

На этом первоначальное знакомство с технологией Windows Script Components можно считать завершенным. Успехов в ее дальнейшем освоении!

Скачать исходные тексты компоненты MailObj.wsc (3 кб)

   
 

Пишите письма: kochurov@narod.ru
Все замечания и пожелания по поводу дизайна принимаются и несомненно будут учтены в будущем.
Это мой первый (и наверное, последний) опыт в веб-дизайне, так что прошу не указывать возмущенно на сайты, послужившие источником моего вдохновения.

</td></tr><!--msnavigation--></table> <!-- copyright (i5) --><div align="center"><a href="http://www.ucoz.ru/" title="Создать сайт бесплатно"><img style="margin:0;padding:0;border:0;" alt="Hosted by uCoz" src="http://s202.ucoz.net/img/cp/9.gif" width="80" height="15" title="Hosted by uCoz" /></a><br /></div><!-- /copyright --> </body> </html>