Jednym z kroków dodania rozszerzenia REST dla ESRI było rejestrowanie obiektów COM na komputerze, na którym ma być rozszerzenie zarejestrowane. Dodatkowo, wymagana jest rejestracja COM w ich własnym menadżerze obiektów/rozszerzeń. W tym celu należy stworzyć albo instalkę albo napisać porządny kawał kodu (60-100 linii) jako Console Application. I tu zaczynają się schody. Nasz kod rejestrujący dllkę w menadżerze ESRI, musi najpierw być zarejestrowany jako COM. Czyli musimy wywołać polecenie regasm dll /codebase (opcją mówiącą o tym, iż w rejestrze zostanie ustawiony klucz określający położenie assembly, które nie jest dodane do Global Assembly Cache) a następnie nasz Console Application. Problem polega na tym iż regasm leży w katalogu %WinDir%/Microsoft.NET/Framework[64]/[version]/regasm.exe i by do niego się odwołać albo trzeba ustawiać PATH w systemie albo uruchomić CMD na danym katalogu – shift+ppm -> Open command window here. Jest to na tyle nie poręczne, iż potem należy przejść do katalogu gdzie nasza aplikacja i dllke przesiadują i uruchomić Console App – jak na środowisko dev, jest to do przyjęcia, ale na produkcyjnym już raczej nie. Na pewno jest to bardziej czasochłonne.
Na szczęście istnieje obejście problemu za pomocą klasy RegistrationServices dostępnej w .NET Framework.
Jeżeli chcemy zarejestrować swój obiekt COM wystarczy, że wykonamy następujący kod:
var regSrv = new RegistrationServices(); regSrv.RegisterAssembly(typeof(LayersExRest).Assembly, AssemblyRegistrationFlags.SetCodeBase); Console.WriteLine("COM Registered");
Jeżeli chcemy go odrejestrować to:
var regSrv = new RegistrationServices(); regSrv.UnregisterAssembly(typeof(LayersExRest).Assembly); Console.WriteLine("COM unregistered");
Oczywiście dla systemów Windows Vista wzwyż należy pamiętać o tym, iż kod musi być uruchomiony na prawach admina – lub po prostu należy wyłączyć UAC.
Zamiast się więc męczyć w zmianę ścieżek można napisać prostą aplikację przyjmującą 4 parametry: rejestracja/odrejestrowanie com; rejestracja/ordrejestrowanie obiektu w menadżerze ESRI.
Fajnie, choć mogłeś już napisać taką prostą aplikacyjkę i ją udostępnić od razu :).
A co do uruchamiania regasm z katalogu Frameworka to oczywiście wystarczy odpalić Visual Studio Command Prompt i już nie trzeba się męczyć ze ścieżką gdyż mamy ją w $PATH, choć oczywiście jest to nadal tylko dla dev’sów.
Pozdrawiam,
Paweł
Idąc za ciosem: masz pomysł/przykład, jak zarejestrować od razy bibliotekę czysto-COMowską, zamiast używania polecenia regsvr32?
zastanawialem sie nad tym, jednak opcji jest wiecej niz tylko codebese dodatkowo to by byl kolejny EXE :) a tak to mialem all w jednej aplikacji (/regasm; /unregasm) – regasm (/reg; /unreg) – ESRI
nie wiem jak w tych nowszych systemach (Win Vista w zwyz) ale ogolnie to w VB (6) byla opcja rejestrowania poprzez kernel32 i user32 – mozna sprawdzic w C# czy pojdzie DllImport – tylko metod nie pamietam :) ale google powinien podac nazwy metod dla rejestrowania COM z VB bez regsrv32 :)
Comments are closed.