Создаём COM-компоненты с помощью VBScript::Журнал СА 8.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
20.12.2019г.
Просмотров: 5397
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 6594
Комментарии: 0
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 7877
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 8168
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 7165
Комментарии: 0
Django 2 в примерах

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Создаём COM-компоненты с помощью VBScript

Архив номеров / 2007 / Выпуск №8 (57) / Создаём COM-компоненты с помощью VBScript

Рубрика: Администрирование /  Продукты и решения

Иван Коробко

Создаём COM-компоненты с помощью VBScript

Вы пишете много скриптов, и надоело переносить код из одного файла в другой? Есть отличное решение – создать COM-объекты на основе своих сценариев.

В 1993 году компанией Microsoft был разработан стандарт COM (Component Object Model – объектная модель компонентов), предназначенный для создания программного обеспечения на основе взаимодействия различных компонентов. Основным понятием, которым оперирует технология COM, является COM-компонент, имеющий уникальный идентификатор (GUID).

Взаимодействие компонентов осуществляется с помощью COM-интерфейса – набора абстрактных свойств и функций (COM-объекты). Доступ к COM-объектам осуществляется с помощью функций Windows API. Основное преимущество заключается в возможности использовать одни и те же COM-объекты в различных языках программирования, ускорить создание приложений.

Основная задача разработчиков COM-объектов – создание компонентной архитектуры, совместимой со скриптовыми языками. Это дает возможность использовать функции COM-компонентов, написанных на различных языках программирования (VB.NET, C++, C#), в том числе и на скриптовых (VBScript, JScript, PerlScript). Использование Windows Script Components (WSC) позволяет создавать сценарии на базе cкриптовых языков, которые можно использовать в качестве COM-объектов.

В качестве примера создадим COM-объект Detect.Domain, который содержит несколько методов. Используя их, можно определить длинное имя домена (DC=Microsoft,DC=Com), короткое имя домена (Microsoft) и DNS-имя домена (Microsoft.Com).

Поставленная задача решается в два этапа. На первом этапе создают WSC-файл, который на втором этапе внедряется в систему.

WSC-файлы

WSC-файл – это XML-файл, созданный по определенным правилам и содержащий скриптовые вставки. XML (eXtensible Markup Language) – расширяемый язык разметки, предназначенный для хранения структурированных данных. В большинстве случаев WSC-файл запускается из командной строки с параметром:

restart.wsc /action:restart

Windows Script Component Wizard

Создать WSC-файл можно вручную, с помощью любого редактора сценариев или мастера, созданного компанией Microsoft – Windows Script Component Winzard (http://www.microsoft.com/downloads/details.aspx?familyid=408024ED-FAAD-4835-8E68-773CCC951A6B&displaylang=en).

После завершения процесса установки мастера в меню «Пуск -> Программы -> Microsoft Windows Script» запустите Windows Script Component Winzard. Этот мастер предложит создать WSC-файл за 6 шагов.

Шаг 1. Define Windows Script Component Object

На первом шаге работы мастера пользователь определяет параметры создаваемого объекта. Первый параметр (Name) – имя объекта, которое является составной частью ID и автоматически добавится в качестве префикса в значении поля Prog ID (см. рис. 1).

Рисунок 1. WSC Wizard. Шаг 1

Рисунок 1. WSC Wizard. Шаг 1

Сформированное значение Prog ID – имя объекта, которое участвует при вызове COM-объекта:

Set obj=CreateObject("Detect.Domain")

Значения второго (FileName) и пятого (Location) параметров задают точное местоположение и имя создаваемого файла.

Четвертым параметром (Version) описывается используемая версия XML в WSC-файле:

<?xml version="1.0" encoding="UTF-8"?>

На основе указанной информации в WSF-файл формируется раздел <registration>:

<?xml version="1.0"?>

<component>

    <registration

       progid="Detect.Domain"

       version="1.00"

       classid="{fda8dd3e-b1b2-4871-aec5-1fa530dc8f6a}"

    >

    </registration>

</component>

Замечание: если WSC-файл создается вручную, то понадобится уникальный GUID, который можно сгенерировать на сайте http://www.famkruithof.net/uuid/uuidgen.

После того как все поля заполнены, кнопка «Next» станет активна, и можно будет перейти к шагу 2.

Шаг 2. Specify characteristics

На этом этапе задаются специфические параметры (см. рис. 2), касающиеся используемого языка, осуществляется настройка обработчика ошибок. С помощью первого параметра (What language do you want to use?) определяется скриптовый язык, используемый в разделе <script> WSC-файла.

Рисунок 2. WSC Wizard. Шаг 2

Рисунок 2. WSC Wizard. Шаг 2

Им может быть VBScript, JScript или другой, например PerlScript:

<?xml version="1.0" encoding="UTF-8"?>

<component>

    …

</component>

Вторым параметром определяется внутренний формат создаваемого файла. Будет ли он совместим с DHTML или с ASP. По умолчанию включена настройка совместимости с DHTML.

С помощью оставшихся параметров осуществляют настройку обработчика ошибок. При включенном первом параметре (Error checking) осуществляется проверка на наличие ошибок, при включенном втором параметре (Debugging) – обработка и отладка ошибок.

В листинге WSC-файла настройки обработчика ошибок находятся в теге <?component?>:

<?xml version="1.0" encoding="UTF-8"?>

<component>

    <?component error ="true" debug="false" ?>

    …

</component>

Если необходимо создать несколько компонентов в одном файле, то теги <component> идентифицируют с помощью уникального идентификатора – ID и помещают в тег <package>. Эта необходимость обусловлена синтаксисом формата XML-файлов, на основе которого создан WSC-файл:

<?xml version="1.0" encoding="UTF-8"?>

<package>

    <component id="Part1">

    …

    </component>

    <component id="Part2">

    …

    </component>

    …

</package>

К сожалению, с помощью WSC Wizard невозможно создать многокомпонентный файл.

Шаг 3. Add Windows Script Component Properties

На третьем шаге задаются свойства компонентов (см. рис. 3), объявляются переменные и константы, которые будут использоваться на следующем шаге при описании методов.

Рисунок 3. WSC Wizard. Шаг 3

Рисунок 3. WSC Wizard. Шаг 3

Каждая переменная имеет один из трех статусов: чтение, запись и чтение-запись.

Например, необходимо преобразовать заданное имя домена (DC=Microsoft,DC=Com) в короткое имя (Micsrosoft.Com). Листинг WSC-файла будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>

<component>

<registration>

    <property domain>

    <get/>

    <put/>

    </property>

<script>

dim domain

    function get_()

       get_domain = domain

    end function

    function put_domain(newValue)

       domain = newValue

    end function

</script>

</component>

Соответствующий ему листинг на VBScript следующий:

Set obj=CreateObject("Detect.Domain")

Obj.Domain = InputBox("Введите имя домена \n (LDAP://DC=Micrisoft.COM)")

Шаг 4. Add Windows Script Component methods

На четвертом шаге декларируются имена функций и названия параметров, которые будут вызываться в качестве методов объекта. Создадим метод LongToDNS, который при заданном значении длинного имени домена (DC=Microsoft,DC=Ru), возвращает его DNS-имя (Microsoft.Ru). Задаваемый параметр (domain) – длинное имя домена (см. рис. 4).

Рисунок 4. WSC Wizard. Шаг 4

Рисунок 4. WSC Wizard. Шаг 4

В WSC-файле метод описывается внутри обязательного тега <public> с помощью тега <method>:

<method>:

<public>

    <method name="LongToDNS">

       <PARAMETER name="domain"/>

    </method>

</public>

После декларации метода, в теге <script> нужно объявить одноименную функцию, аргументом которой будет указанный параметр:

<script language="VBScript">

<![CDATA[

    Function LongToDNS(domain)

       DomainArray=Split(domain,",")

       temp=""

           For Each element In DomainArray

              temp=temp+right(element,Len(element)-3)+"."

           Next

       LongToDNS=Left(temp,Len(temp)-1)

    End Function

]]>

</script>

Остальные функции не имеют никаких параметров: определяют имя текущего домена. Полная версия листинга WSC-файла размещена на сайте журнала www.samag.ru в разделе «Исходный код».

Замечание: методы, свойства и события приписывают в WSC-файле вручную в разделе <script> после окончания работы мастера.

Листинг VBS-файла, использующего создаваемый COM-объект, будет следующим:

Set obj=CreateObject("Detect.Domain")

Wscript.Echo obj.LongToDNS("DC=Microsoft,DC=RU")

Шаг 5. Add Windows Script Component events

На этом шаге описывается третий тип параметров – events (см. рис. 5). Этот шаг обычно пропускается, поскольку события не востребованы в сценариях. Достаточно часто используется при создании HTML- и ASP-страниц.

Рисунок 5. WSC Wizard. Шаг 5

Рисунок 5. WSC Wizard. Шаг 5

Шаг 6. That’s all we need!

На заключительном этапе приводится информация о характеристиках создаваемого WSC-файла на основе введенных параметров (см. рис. 6).

Рисунок 6. WSC Wizard. Шаг 6

Рисунок 6. WSC Wizard. Шаг 6

Модернизация WSC-шаблона

После того как WSC-файл создан, необходимо снабдить его комментариями, добавить необходимые функции и процедуры.

Комментарий

Комментарий помещают внутрь тега <comment>, расположенного в элементе <package> на одном уровне с <component>, или в элементе <component>, если он родительский. Местоположение комментария внутри оговоренных элементов не имеет значения.

Вариант А:

<?xml version="1.0" encoding="UTF-8"?>

<package>

    <comment>

           Это комментарий файла

    </comment>

    <component id="Part1">

    …

    </component>

    <component id="Part2">

    …

    </component>

    …

</package>

Вариант Б:

<?xml version="1.0" encoding="UTF-8"?>

<component>

    <comment>

           Это комментарий файла

    </comment>

    …

</component>

Функции в WSC-файл

С помощью WSC Wizard невозможно добавить в файл каких-либо функций. Предлагаемый Microsoft мастер создает шаблон, в котором декларированы переменные и объявляются функции.

После работы мастера нужно добавить функции в файл в раздел <script>:

<?xml version="1.0"?>

<component>

<public>

    <method name="LongToDNS">

       <PARAMETER name="Domain"/>

    </method>

</public>

<implements type="Behavior" id="Behavior"/>

<script language="VBScript">

<![CDATA[

function LongToDNS(Domain)

    DomainArray=Split(domain,",")

       For Each a In DomainArray

       temp=temp+right(a, Len(a)-3)+"."

       Next

    LongToDNS=Left(temp,Len(temp)-1)

end function

]]>

</script>

</component>

Импорт пространств имен

WSC-файлы, как и XML, конечно же, не знают о других объектах. Чтобы сделать их доступными, необходимо осуществить импорт пространства имен с помощью раздела <reference>, расположенного перед разделом <registration>:

<?xml version="1.0"?>

<component>

    …

    <registration>

    …

</component>

В разделе <script>, как в традиционном VBScript, осуществляется вызов функции:

<script>

Function Save(PathToFile, WriteData)

    set obj = CreateObject("Scripting.FileSystemObject")

    set fso = obj.CreateTextFile(PathToFile, True, TRUE)

    fso.WriteLine(WriteData)

    fso.Close

</script>

Регистрация COM-объекта

Зарегистрировать созданный компонент в качестве COM-объекта можно несколькими способами.

Первый способ

Самый часто используемый способ – зарегистрировать его как псевдо-Com-объект, выбрав в контекстном меню WSC-файла «Register», или «Подключить», в зависимости от версии Windows (см. рис. 7).

Рисунок 7. Регистрация WSC-файла как COM-компонента

Рисунок 7. Регистрация WSC-файла как COM-компонента

После успешной регистрации выдается соответствующее сообщение. В реесте Windows в кусте HKEY_CLASSES_ROOT\CLSID появляется папка, имя которой совпадает с GUID, указанном в разделе <register> (cм. рис. 8).

Рисунок 8. Регистрация COM-объекта в реестре

Рисунок 8. Регистрация COM-объекта в реестре

Второй способ

Второй способ предпочтительнее, однако он более сложный. Суть заключается в том, что на основе WSC-файла создают TLB-файл, который затем преобразовывают в DLL-библиотеку, которая является полноценным COM-объектом.

Для регистрации TLB-файла выберите в контекстном меню WSC-файла опцию «Generate Type Library». В результате вызова этой команды будет сгенерирован файл scriptlet.tlb. Если в файле присутствует тег <implements>, будет выведено сообщение с синтаксисом команды (см. рис. 9).

Рисунок 9. Создание TLB-файла

Рисунок 9. Создание TLB-файла

После того как создана библиотека, необходимо преобразовать ее в DLL-файл с помощью команды:

Tlbimp.exe scriptlet.tlb

Синтаксис утилиты Type Library Exporter (Tlbimp.exe) можно найти на сайте Microsoft: http://msdn2.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx. После создания библиотеки ScriptletTypeLib.dll ее необходимо переименовать и зарегистрировать с помощью утилиты regsvr32.exe:

regsvr32.exe /s

Третий способ

Самый простой: с WSC-файлами можно работать без регистрации. Необходимо знать только имя и местоположение файла. Вызов функций осуществляется с помощью функции GetObject():

Set obj = GetObject("script:C:\Example\DDN.wsc")

Wscript.Echo  obj.LongToDNS("DN=Microsoft,DN=Com"

Вызов COM-объекта

Созданный COM-объект вызывают с помощью функции CreateObject():

Set obj=createobject("Detect.Domain")

Wscript.Echo  obj.LongToDNS("DN=Microsoft,DN=Com")

Заключение

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


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru