
A mellékelt példa használata előtt telepítenie kell a számítógépére az Office XP Primary Interop Asseblies csomagot. Ennek módjáról olvassa el a Kezdet beállítások című szakaszt a cikkben.
Kezdeti beállítások
Az Office XP Primary Interop Asseblies csomagja a cikk írásakor a http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en helyen volt elérhető, mely cím természetesen azóta megváltozhatott.
A letöltött állomány az oxppia.exe nevet viseli, letöltés után meg kell adnunk egy telepítési útvonalat az önkicsomagoló állománynak, amely elhelyezi a mintegy 20 darab DLL-ből és a hozzájuk tartozó regisztrációs állományokból álló kollekciót a megadott mappában.
A kicsomagolt halmazban találunk egy register.bat parancsállományt, melynek segítségével az assembly-ket el kell helyeznünk a globális assembly cache-ben (GAC). A telepítő program hiánya miatt ez manuális művelet, melyen ezzel a parancsállománnyal próbáltak segíteni a fejlesztők.
A parancsállomány a GACUTIL.EXE .NET Framework segédeszközt használja, mely automatikusan elvégzi a paraméterként kapott assembly elhelyezését.
A parancssori eszköz szintaxisa a következő:
gacutil [opciók] <assembly neve>
A register.bat állományban a két jelentős opció közül az egyiket használjuk az assembly-k telepítésére. A két kapcsoló a következő:
| Opció |
Jellemzői |
| /i |
Installálja a paraméterként kapott assembly-t. Például gacutil /i adodb.dll. |
| /u |
Törli az assembly-t a GAC-ból. Például gacutil /u adodb. |
Az assembly állományok mellett találunk egy-egy regisztrációs állományt is, mely a szükséges bejegyzéseket elhelyezi a Rendszerleíró adatbázisban. Látható hogy a REGEDIT kulcsszó után található a parancs /s opciója, mellyel arra utasítjuk a programot, hogy ne jelenítse meg a grafikus kezelőfelületet, csupán helyezze el a bejegyzéseket a megfelelő helyre.
Az assembly-k elhelyezését ellenőrizhetjük is, ha megnyitjuk a <rendszer meghajtó>:\\Windows\assembly\gac mappát. Minden assembly kapott egy alkönyvtárat, benne a DLL-el.
A csomag lehetővé teszi, hogy hatékonyabban hívjunk meg nem-menedzselt COM objektumokat menedzselt kódból. Lehetővé válik, hogy a nem-menedzselt típusokhoz a menedzselt alkalmazások már szerkesztési időben hozzákötődjenek, és a CLR futtatórendszer számára információkat szolgáltassanak arról, hogyan kezelje ezeket a típusokat futási időben.
Az úgynevezett együttműködő (interop) assembly-k könnyebben kezelhetők, mivel minden egyes dinamikus könyvtár csak egy assembly-t tartalmaz.
Demonstrálandó a csomag elemeire való hivatkozást, elkészítettünk egy példa alkalmazást, és az alkalmazást telepíteni képes programot.
A mellékelt példa úgy használható, ha letöltjük a csomagot, a megadott módon telepítjük azt, majd az alkalmazást és a telepítőt lefordítjuk. A telepítő alkalmazást egy másik számítógépen elindítva, a telepített program már a csomag telepítése nélkül is használható.
Client projekt
Az alkalmazás egy Form, melyen betöltődés után látható lesz a telepített Word alkalmazás verziószáma. Az Add reference menüpont kiválasztása után a COM fül alatt megkeressük a Microsoft Word 10.0 Object Library elemet. A COM objektum bekerül a referenciák sorába. Az objektumra klikkelve megnézhetjük a tulajdonságlapját, ahol érdekes információhoz jutunk.
A csomag telepítése után a Properties ablak Path mezőjében a GAC-ban elhelyezett assembly-re kapunk egy hivatkozást, valahogy így:
C:\WINDOWS\assembly\GAC\Word\...\Microsoft.Office.Interop.Word.dll
A csomag telepítése előtt, ha a fenti referenciát adtuk a projekthez, akkor a projekt assemblyjének mappájában generálódott egy helyi másolat az Interop.Word.dll állományból, és telepítve az alkalmazást egy másik számítógépen, az alkalmazás a helyi DLL-t használta fel.
Példánkban azonban a GAC egy assemblyjére mutat a hivatkozás, tehát egy másik számítógépre telepítve a programunkat, az assemblyt ugyanitt fogja az alkalmazás keresni.
Az alkalmazás kódjában a következőképpen példányosítottuk a Word alkalmazást:
Microsoft.Office.Interop.Word._Application wa = new Microsoft.Office.Interop.Word.Application();
Egyszerűbb, ha a csomag használatakor a Microsoft.Office.Interop.Word osztályt a következőképpen adjuk meg:
using Word = Microsoft.Office.Interop.Word;
Ekkor már a hagyományos módon használhatjuk az osztályt.
Word._Application wa = new Word.Application();
CSetup projekt
A telepítő alkalmazásban néhány dolgot be kell állítani, hogy az alkalmazás máshol is megfelelően működjön. Többféleképpen telepíthetjük az alkalmazást, de annak érdekében, hogy olyan számítógépen is működjön, ahol nincs telepítve az Office XP PIAs csomag, a következőt kell tenni.
Először a Setup projekt gyorsmenüjében az Add pontra klikkelve kiválasztjuk, hogy a telepítendő alkalmazás generált kódja (output) kerüljön a telepítőhöz. Válasszuk a Project Output pontot. A megnyíló ablakot OK-val zárjuk be.
A projekt gyorsmenüjében a View pontban kiválasztjuk a File System pontot, majd a megjelenő ablak gyorsmenüjében az Add Special Folder pontot. Hozzáadjuk a GAC mappáját a Global Assembly Cache Folder kiválasztásával.
Kiválasztjuk a Microsoft.Office.Interop.Word.dll assembly-t, majd a Tulajdonság lapján a Folder mező melletti gombra kattintva kiválasztjuk, hogy az imént létrehozott GAC-mappába kerüljön, és ne az alkalmazás mappájába. Ezzel elérhető, hogy a célszámítógép nem kell, hogy telepítse a PIA csomagot. Sőt, így elkerülhető, hogy egy assembly több példányban is jelen legyen.
Következő lépés, hogy a View menüpontban Registry alpontot kiválasztjuk, és a megjelenő ablakban is meghívjuk a gyorsmenüt, mely egyetlen, Import feliratú ponttal rendelkezik. Megkeressük az assembly-hez tartozó .reg állományt, majd a projekthez adjuk.
Végül a telepít projektbe alapértelmezett módon bekerült MSWORD.OLB, Office.dll és stdole.dll assembly-ket el kell távolítani onnan. A gyorsmenüjükben válasszuk az Exclude pontot.
A projekt gyorsmenüjében az Install pontot választva indulhat a telepítés folyamata.