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.

4 KOMENTARZE

  1. 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ł

  2. 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

  3. 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.