C# - Windows Script Component alapismeretek

Windows Script Component lehetőségei 1. rész

forráskód letöltése
Most induló cikksorozatunkban bemutatjuk a Windows-család Windows Script Component névre keresztelt lehetőségét, melynek segítségével parancsnyelven írt kódból érhetjük el az ugyancsak valamilyen script-nyelven megírt komponenseinket. Első cikkünkben bemutatjuk, hogyan hozható létre egy ilyen komponens, és regisztrálva hogyan érhetjük azt el egy másik parancsállományból.
A példa használata előtt a komponenst regisztrálni kell. Ehhez olvassa el a cikk Komponens regisztrációja című szakaszát.
Áttekintés
A komponensek legfontosabb előnyeit a következő felsorolásban foglaltuk össze:
  • Kis méretűek és hatékonyak
  • Egyszerűen elkészíthetők, karbantarthatók, és felhasználhatók
  • Tartalmazzák annak lehetőségét, hogy a kód felhasználásával COM-komponensként regisztráljuk őket
  • A rendszerszolgáltatások széles tárházát tudják elérni
  • Felhasználhatók lokális rendszerekben csakúgy, mint távoli számítógépeken futva, ugyanis az objektumra nevével hivatkozhatunk, vagy egy URL-el.
A script komponensek kódját egy .wsc kiterjesztésű állományban tároljuk, mely felépítését tekintve XML-szerkezetű. Az állomány a komponens kódján kívül tartalmazza a regisztrációhoz szükséges adatokat, a komponens viselkedését meghatározó elemeket, valamint opcionálisan a típuskönyvtár létrehozásához szükséges információkat.
A parancsállományban a következő XML-elemek (tagok) fordulhatnak elő:
A <package> elem a fő szerkezeti tag a kódban. Jelzi az értelmezőnek, hogy egy komponenscsomagról van szó.
A <component> elem jelöli ki a komponens kódjának kezdetét. Ebből több is lehet egy csomagban.
A <registration> tartalmazza a komponens regisztrációs adatait, melyben megadhatjuk a komponens nevét, verzióját, egy CLASSID azonosítót az egyediség végett, valamint ha úgy döntünk, hogy készítünk egy .TLB állományt, akkor szükséges egy generált GUID megadása is. Az említett állomány egy bináris kód, mely alkalmazásokból elérhető. A regisztrációs bejegyzésekre nincs szükség, ha a hívó alkalmazás közvetlenül nem használja a Regisztrációs adatbázis.
A <public> elemben adhatjuk meg komponens nyilvánosan elérhető property-jeit, metódusait, illetve eseményeit. Itt csak a deklarációt kell megadni. Ez lesz a komponens „interfésze”.
A fent deklarált tulajdonságokat a <script> elemben kell definiálnunk.
Az <object> elemben hivatkozhatunk egy másik komponensre, például egy COM-objektumra.
A <resource> elemben hivatkozhatunk egy másik script állományra, melynek metódusait, vagy változóit felhasználjuk a parancsállományunkban.
A <reference> elemben hivatkozhatunk egy típuskönyvtárra, melyet használni szeretnénk a script-ben.
Komponens készítése
A mellékelt példában egy összeadó műveletet végzünk el egy általunk létrehozott komponens metódusának meghívásával. A komponensünket egy, a program mappájában elhelyezett JScript parancsállományból hívjuk meg.
A komponens létrehozása történhet manuálisan, azonban a példában bemutatjuk, hogyan használható erre a célra a Microsoft Windows Script Component Wizard eszköze. A kis programocska a cikk írásakor a következő címen volt elérhető, és letölthető: http://www.microsoft.com/downloads/details.aspx?FamilyId=408024ED-FAAD-4835-8E68-773CCC951A6B&displaylang=en.
A programban lépésről lépésre meg kell adni a generálandó komponens tulajdonságait:

Meg kell adni a komponens nevét, a generálandó állomány nevét, az azonosítóját, és célhelyet, ahová kerül az elkészült állomány:

Létre kell hoznunk a property-k deklarációját: példánkban két property-t adtunk meg, a két operandus tárolására.

Specifikálnunk kell a komponens karakterisztikáját: a script-nyelvet, futási információkat, hibakeresésre vonatkozó adatokat.
Létre kell hoznunk a metódus(ok) deklarációját: példánkban egy AddNumbers nevű metódust hoztunk létre a művelet elvégzéséhez. A metódus két paraméterrel rendelkezik.
A program a beállítások alapján létrehozza a kódot tartalmazó állományt, melynek <script> tagjában el kell helyezni a definíciókat. A generált kód a következő: első rész a regisztrációs adatokat tartalmazza.

<?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration
  description="SumComponent"
  progid="SumComponent"
  version="1.00"
  classid="{f42bbd49-fa93-4730-b3fa-062cd7d52c99}">
</registration>
A következő szakaszban a deklaráció:
<public>
  <property name="Operand1">
    <get/>
    <put/>
  </property>
  <property name="Operand2">
    <get/>
    <put/>
  </property>
  <method name="AddNumbers">
  </method>
</public>
A <script> tagban megtalálható a komponens konstruktorának definíciója is, valamint a property-k beállítását és lekérdezését végző függvények kódjai. A metódus kódját viszont nekünk kell megadni:
<script language="JScript">
<![CDATA[
  ...
  function AddNumbers()
  {
    return (Operand1 + Operand2);
  }
]]>
</script>
</component>
Komponens regisztrációja
A komponens kódját ezt követően regisztrálnunk kell. Ehhez a létrejött állományon kell kattintanunk az egér gombjával, és ki kell választanunk a Regisztrálás menüpontot. A regisztráció törléséhez a Regisztrálás törlése menüpont választható.
A manuális módszerben használhatjuk a regsvr32.exe programot. A segédprogram az operációs rendszer mappájában található alapértelmezésben: <winroot>:\Windows\system32\regsvr32.exe.
Ekkor meg kell adni az állomány elérési útvonalát:
regsvr32 file:\\component_name.wsc
A komponens regisztráció után érhető csak el a hívó script kódból.
Komponens felhasználása parancsállományból
A SumComponent.wsc állomány regisztrációja után a komponens SumComponent néven érhető el, és példányosítható. A Caller.js script parancssori argumentumként kapja meg a hívó alkalmazásból az összeadó művelet operandusait, majd létrehozva egy példányt a komponensből, meghívja annak AddNumbers metódusát.
Ehhez létrehozunk egy objektumot az argumentumok tárolására:
var objArgs = WScript.Arguments;
Lekérdezzük azokat:
op1 = new Number(objArgs(0));
op2 = new Number(objArgs(1));
Létrehozunk egy példányt a komponensből, mintha csak egy beépített Windows Script Host komponens lenne:
var oComp = WScript.CreateObject("SumComponent");
Feltöltjük property-jeit az operandusokkal:
oComp.Operand1 = op1;
oComp.Operand2 = op2;
És meghívjuk a metódusát:
result = oComp.AddNumbers();
Az eredményt egy üzenetpanelen jelenítjük meg.
Az alkalmazásban a szerkesztőmezők kitöltése után meg kell nyomnunk a MŰVELET gombot az összeadás elvégzéséhez.

Windows Script Component lehetőségei cikksorozat