Polecam

.NET Blogs PL
CodeGuru


Tips & Tricks 21: Rejestrowanie obiektów COM nieużywając regasm

October 21, 2010 in categories: pro by Gutek

5

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 comments for "Tips & Tricks 21: Rejestrowanie obiektów COM nieużywając regasm"

  1. Paweł
    Paweł Says:

    Fajnie, choć mogłeś już napisać taką prostą aplikacyjkę i ją udostępnić od razu Smile.

    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ł

    • Gutek
      Gutek Says:

      zastanawialem sie nad tym, jednak opcji jest wiecej niz tylko codebese dodatkowo to by byl kolejny EXE Smile a tak to mialem all w jednej aplikacji (/regasm; /unregasm) - regasm (/reg; /unreg) - ESRI

  2. Wojciech Poniatowski
    Wojciech Poniatowski Says:

    Idąc za ciosem: masz pomysł/przykład, jak zarejestrować od razy bibliotekę czysto-COMowską, zamiast używania polecenia regsvr32?

    • Gutek
      Gutek Says:

      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 Smile ale google powinien podac nazwy metod dla rejestrowania COM z VB bez regsrv32 Smile

Comments are closed

© 2008-2010 Jakub Gutkowski. Powered by BlogEngine.NET 1.5.1.14. Hosted on OrcsWeb.

Design