Wdrażanie składników COM za pomocą technologii ClickOnce
Wdrażanie starszych składników COM tradycyjnie było trudnym zadaniem. Składniki muszą być zarejestrowane globalnie i w związku z tym mogą powodować niepożądane skutki uboczne między nakładającymi się aplikacjami. Ta sytuacja nie jest zwykle problemem w aplikacjach .NET Framework, ponieważ składniki są całkowicie odizolowane od aplikacji lub są zgodne obok siebie. Program Visual Studio umożliwia wdrażanie izolowanych składników COM w systemie operacyjnym Windows.
Technologia ClickOnce zapewnia łatwy i bezpieczny mechanizm wdrażania aplikacji platformy .NET. Jeśli jednak aplikacje korzystają ze starszych składników COM, należy wykonać dodatkowe kroki wdrażania tych składników. W tym temacie opisano sposób wdrażania izolowanych składników COM oraz odwołań do składników natywnych (na przykład z języka Visual Basic 6.0 lub Visual C++).
Aby uzyskać więcej informacji na temat wdrażania izolowanych składników COM, zobacz Upraszczanie wdrażania aplikacji za pomocą technologii ClickOnce i bez rejestracji COM.
Bezpłatna rejestracja COM
Bez rejestracji COM to nowa technologia wdrażania i aktywowania izolowanych składników COM. Działa przez umieszczenie wszystkich informacji o typach i rejestracji składnika, które są zwykle instalowane w rejestrze systemowym w pliku XML nazywanym manifestem, przechowywanym w tym samym folderze co aplikacja.
Izolowanie składnika COM wymaga zarejestrowania go na komputerze dewelopera, ale nie musi być zarejestrowany na komputerze użytkownika końcowego. Aby wyizolować składnik COM, wystarczy ustawić właściwość izolowana odwołania na true. Domyślnie ta właściwość ma wartość False, co oznacza, że powinna być traktowana jako zarejestrowane odwołanie COM. Jeśli ta właściwość ma wartość True, powoduje wygenerowanie manifestu dla tego składnika w czasie kompilacji. Powoduje również skopiowanie odpowiednich plików do folderu aplikacji podczas instalacji.
Gdy generator manifestu napotka izolowane odwołanie COM, wylicza wszystkie CoClass
wpisy w bibliotece typów składnika, pasujące do każdego wpisu z odpowiednimi danymi rejestracji i generujące definicje manifestu dla wszystkich klas COM w pliku biblioteki typów.
Wdrażanie składników COM bez rejestracji przy użyciu technologii ClickOnce
Technologia wdrażania Technologii ClickOnce jest odpowiednia do wdrażania izolowanych składników COM, ponieważ zarówno Technologia ClickOnce, jak i bezpłatna rejestracja modelu COM wymagają, aby składnik miał manifest do wdrożenia.
Zazwyczaj autor składnika powinien podać manifest. Jeśli jednak nie, program Visual Studio może automatycznie wygenerować manifest dla składnika COM. Generowanie manifestu jest wykonywane podczas procesu publikowania technologii ClickOnce; Aby uzyskać więcej informacji, zobacz Publikowanie aplikacji ClickOnce. Ta funkcja umożliwia również korzystanie ze starszych składników utworzonych we wcześniejszych środowiskach programistycznych, takich jak Visual Basic 6.0.
Istnieją dwa sposoby wdrażania składników COM przez aplikację ClickOnce:
Użyj programu inicjjącego, aby wdrożyć składniki COM; Działa to na wszystkich obsługiwanych platformach.
Użyj natywnej izolacji składników (nazywanej również wdrożeniem modelu COM bez rejestracji).
Przykład izolowania i wdrażania prostego składnika COM
Aby zademonstrować wdrożenie składnika COM bez rejestracji, w tym przykładzie zostanie utworzona aplikacja oparta na systemie Windows w visual basic, która odwołuje się do izolowanego natywnego składnika COM utworzonego przy użyciu języka Visual Basic 6.0 i wdroży ją przy użyciu technologii ClickOnce.
Najpierw należy utworzyć natywny składnik COM:
Aby utworzyć natywny składnik COM
Korzystając z programu Visual Basic 6.0, w menu Plik kliknij pozycję Nowy, a następnie pozycję Projekt.
W oknie dialogowym Nowy projekt wybierz węzeł Visual Basic i wybierz projekt Biblioteki DLL ActiveX. W polu Nazwa wpisz
VB6Hello
.Uwaga
Tylko typy projektów ActiveX DLL i ActiveX Control są obsługiwane w modelu COM bez rejestracji; Typy projektów dokumentów ActiveX EXE i ActiveX nie są obsługiwane.
W Eksplorator rozwiązań kliknij dwukrotnie Class1.vb, aby otworzyć edytor tekstów.
W Class1.vb dodaj następujący kod po wygenerowany kod dla
New
metody :Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End Sub
Skompiluj składnik. W menu Kompiluj kliknij pozycję Kompiluj rozwiązanie.
Uwaga
Bez rejestracji com obsługuje tylko biblioteki DLL i typy projektów com. Nie można używać exes z bez rejestracji COM.
Teraz możesz utworzyć aplikację opartą na systemie Windows i dodać odwołanie do składnika COM.
Aby utworzyć aplikację opartą na systemie Windows przy użyciu składnika COM
W języku Visual Basic w menu Plik kliknij pozycję Nowy, a następnie pozycję Projekt.
W oknie dialogowym Nowy projekt wybierz węzeł Visual Basic i wybierz pozycję Aplikacja systemu Windows. W polu Nazwa wpisz
RegFreeComDemo
.W Eksplorator rozwiązań kliknij przycisk Pokaż wszystkie pliki, aby wyświetlić odwołania do projektu.
Kliknij prawym przyciskiem myszy węzeł Odwołania i wybierz polecenie Dodaj odwołanie z menu kontekstowego.
W oknie dialogowym Dodawanie odwołania kliknij kartę Przeglądaj, przejdź do VB6Hello.dll, a następnie wybierz ją.
Odwołanie VB6Hello zostanie wyświetlone na liście odwołań.
Wskaż przybornik, wybierz kontrolkę Przycisk i przeciągnij ją do formularza Form1.
W oknie Właściwości ustaw właściwość Text przycisku na Hello.
Kliknij dwukrotnie przycisk, aby dodać kod procedury obsługi, a następnie w pliku kodu dodaj kod, aby program obsługi odczytał w następujący sposób:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim VbObj As New VB6Hello.Class1 VbObj.SayHello() End Sub
Uruchom aplikację. W menu Debugowanie kliknij pozycję Rozpocznij debugowanie.
Następnie należy odizolować kontrolkę. Każdy składnik COM używany przez aplikację jest reprezentowany w projekcie jako odwołanie com. Te odwołania są widoczne w węźle Odwołania w oknie Eksplorator rozwiązań. (Zwróć uwagę, że można dodać odwołania bezpośrednio przy użyciu elementu Dodaj polecenie Odwołanie w menu Projekt lub pośrednio, przeciągając kontrolkę ActiveX na formularz.
W poniższych krokach pokazano, jak odizolować składnik COM i opublikować zaktualizowaną aplikację zawierającą izolowany formant:
Aby odizolować składnik COM
W Eksplorator rozwiązań w węźle Odwołania wybierz odwołanie VB6Hello.
W oknie Właściwości zmień wartość właściwości Izolowana z False na True.
W menu Kompiluj kliknij pozycję Kompiluj rozwiązanie.
Teraz po naciśnięciu klawisza F5 aplikacja działa zgodnie z oczekiwaniami, ale jest teraz uruchomiona w ramach modelu COM bez rejestracji. Aby to udowodnić, spróbuj wyrejestrować składnik VB6Hello.dll i uruchomić RegFreeComDemo1.exe poza środowiskiem IDE programu Visual Studio. Tym razem po kliknięciu przycisku nadal działa. Jeśli tymczasowo zmienisz nazwę manifestu aplikacji, ponownie zakończy się niepowodzeniem.
Uwaga
Można symulować brak składnika COM, tymczasowo wyrejestrując go. Otwórz wiersz polecenia, przejdź do folderu systemowego, wpisując cd /d %windir%\system32
polecenie , a następnie wyrejestruj składnik, wpisując .regsvr32 /u VB6Hello.dll
Możesz zarejestrować go ponownie, wpisując .regsvr32 VB6Hello.dll
Ostatnim krokiem jest opublikowanie aplikacji przy użyciu technologii ClickOnce:
Aby opublikować aktualizację aplikacji za pomocą izolowanego składnika COM
W menu Kompilacja kliknij pozycję Publikuj RegFreeComDemo.
Zostanie wyświetlony Kreator publikowania.
W Kreatorze publikowania określ lokalizację na dysku komputera lokalnego, do której można uzyskać dostęp i zbadać opublikowane pliki.
Kliknij przycisk Zakończ , aby opublikować aplikację.
Jeśli zbadasz opublikowane pliki, zauważysz, że plik sysmon.ocx jest uwzględniony. Kontrolka jest całkowicie odizolowana od tej aplikacji, co oznacza, że jeśli maszyna użytkownika końcowego ma inną aplikację korzystającą z innej wersji kontrolki, nie może zakłócać działania tej aplikacji.
Odwołania do zestawów natywnych
Program Visual Studio obsługuje odwołania do natywnych zestawów Visual Basic 6.0 lub C++; takie odwołania są nazywane odwołaniami natywnymi. Możesz określić, czy odwołanie jest natywne, sprawdzając, czy jego właściwość Typ pliku jest ustawiona na wartość Natywna lub ActiveX.
Aby dodać odwołanie natywne, użyj polecenia Dodaj odwołanie , a następnie przejdź do manifestu. Niektóre składniki umieszczają manifest wewnątrz biblioteki DLL. W takim przypadku możesz po prostu wybrać samą bibliotekę DLL, a program Visual Studio doda ją jako odwołanie natywne, jeśli wykryje, że składnik zawiera osadzony manifest. Program Visual Studio automatycznie uwzględni wszystkie zależne pliki lub zestawy wymienione w manifeście, jeśli znajdują się one w tym samym folderze co składnik, do którego odwołuje się odwołanie.
Izolacja sterowania modelu COM ułatwia wdrażanie składników MODELU COM, które nie mają jeszcze manifestów. Jeśli jednak składnik jest dostarczany z manifestem, możesz odwoływać się bezpośrednio do manifestu. W rzeczywistości należy zawsze używać manifestu dostarczonego przez autora składnika wszędzie tam, gdzie jest to możliwe, zamiast używać właściwości Izolowana .
Ograniczenia wdrażania składnika COM bez rejestracji
Bez rejestracji com zapewnia jasne korzyści w porównaniu z tradycyjnymi technikami wdrażania.
Nie każdy składnik jest odpowiednim kandydatem do rejestracji modelu COM. Składnik nie jest odpowiedni, jeśli którykolwiek z następujących elementów jest spełniony:
Składnik jest serwerem poza procesem. Serwery EXE nie są obsługiwane; Obsługiwane są tylko biblioteki DLL.
Składnik jest częścią systemu operacyjnego lub jest składnikiem systemu, takim jak XML, składnik przeglądarki lub składniki dostępu do danych firmy Microsoft (MDAC). Należy postępować zgodnie z zasadami redystrybucji autora składnika; zaewidencjonuj dostawcę.
Składnik jest częścią aplikacji, takiej jak Microsoft Office. Na przykład nie należy próbować izolować modelu obiektów programu Microsoft Excel. Jest to część pakietu Office i może być używana tylko na komputerze z zainstalowanym pełnym produktem pakietu Office.
Składnik jest przeznaczony do użycia jako dodatek lub przystawka, na przykład dodatek pakietu Office lub kontrolka w przeglądarce sieci Web. Takie składniki zwykle wymagają pewnego rodzaju schematu rejestracji zdefiniowanego przez środowisko hostingu, które wykracza poza zakres samego manifestu.
Składnik zarządza fizycznym lub wirtualnym urządzeniem dla systemu, na przykład sterownikiem urządzenia dla buforu wydruku.
Składnik jest redystrybucyjnym dostępem do danych. Aplikacje danych zwykle wymagają zainstalowania oddzielnego pakietu redystrybucyjnego dostępu do danych przed uruchomieniem. Nie należy próbować izolować składników, takich jak Microsoft ADO Data Control, Microsoft OLE DB lub Microsoft Data Access Components (MDAC). Zamiast tego, jeśli aplikacja używa usług MDAC lub SQL Server Express, należy ustawić je jako wymagania wstępne; Zobacz Instrukcje: instalowanie wymagań wstępnych za pomocą aplikacji ClickOnce.
W niektórych przypadkach deweloper składnika może przeprojektować go do modelu COM bez rejestracji. Jeśli nie jest to możliwe, nadal można tworzyć i publikować aplikacje, które zależą od nich za pośrednictwem standardowego schematu rejestracji przy użyciu programu inicjacyjnego. Aby uzyskać więcej informacji, zobacz Creating Bootstrapper Packages (Tworzenie pakietów programu inicjjącego).
Składnik COM można odizolować tylko raz na aplikację. Na przykład nie można odizolować tego samego składnika COM od dwóch różnych projektów biblioteki klas, które są częścią tej samej aplikacji. Spowoduje to wyświetlenie ostrzeżenia dotyczącego kompilacji i załadowanie aplikacji w czasie wykonywania zakończy się niepowodzeniem. Aby uniknąć tego problemu, firma Microsoft zaleca hermetyzowanie składników COM w jednej bibliotece klas.
Istnieje kilka scenariuszy, w których rejestracja modelu COM jest wymagana na maszynie dewelopera, mimo że wdrożenie aplikacji nie wymaga rejestracji. Właściwość
Isolated
wymaga zarejestrowania składnika COM na maszynie dewelopera w celu automatycznego wygenerowania manifestu podczas kompilacji. Podczas kompilacji nie ma możliwości przechwytywania rejestracji, które wywołują rejestrację własną. Ponadto wszystkie klasy niezdefiniowane jawnie w bibliotece typów nie zostaną odzwierciedlone w manifeście. W przypadku używania składnika COM ze wstępnie istniejącym manifestem, takim jak odwołanie natywne, składnik może nie być zarejestrowany w czasie programowania. Jednak rejestracja jest wymagana, jeśli składnik jest kontrolką ActiveX i chcesz ją uwzględnić w przyborniku i projektancie formularzy systemu Windows.