Nasazování komponent COM s ClickOnce
Nasazení starších verzí součástí COM byla tradičně obtížná úloha.Součásti vyžadují globální registraci a to může způsobit nežádoucí vedlejší účinky mezi překrývajícími se aplikacemi.Tato situace není obecně problémem v aplikacích rozhraní .NET Framework, protože součásti jsou zcela izolovány do aplikace nebo jsou navzájem kompatibilní.Visual Studio umožňuje nasadit izolované součásti COM na systému Windows XP nebo na vyšším operačním systému.
ClickOnce poskytuje mechanismus pro snadné a bezpečné nasazování Vašich aplikací .NET. Avšak pokud aplikace používají starší verze součástí COM, budete muset provést další kroky pro jejich zavedení.Toto téma popisuje, jak nasadit izolované součásti COM a referenční nativní součástí (například z Visual Basic 6.0 nebo Visual C++).
Další informace o zavedení izolované komponenty modelu COM naleznete v části "zjednodušit nasazení aplikace s ClickOnce a bez registrace COM" na https://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/default.aspx.
Bez-registrační COM
Bez-registrační COM je nová technologie pro nasazování a aktivace izolovaných součástí COM.Je založena na vložení všech součástí knihovny typů a registračních informací, které jsou obvykle nainstalovány do systémových registrů do souboru XML nazývaného manifest, který je uložen ve stejné složce jako aplikace.
Izolace součásti COM vyžaduje, aby byla registrována na počítači vývojáře, ale nemusí být registrována na počítači koncového uživatele.Pro izolování součásti COM je nutné provést nastavení jeho referenční vlastnosti Izolovaná na True.Ve výchozím stavu je tato vlastnost nastavena na hodnotu False, označující že má být zpracovávána jako registrovaný odkaz COM.Pokud je tato vlastnost True, způsobí to generování manifestu pro tuto součást v okamžiku sestavení.Také způsobuje, že odpovídající soubory budou zkopírovány do složky aplikace během instalace.
Když se generátor manifestu setká s izolovaným odkazem COM, výčte všechny položky CoClass v dané součásti knihovny typů, odpovídající každé položce s odpovídajícímy daty registrace a vygeneruje definice manifestu pro všechny třídy COM do souboru typu knihovna.
Nasazení bez-registrační součástí COM pomocí ClickOnce
Technologie nasazení ClickOnce je vhodná pro nasazování izolovaných součástí COM, protože ClickOnce a bez-registrační COM vyžadují, aby součást měla manifest pro nasazení.
Obvykle by měl autor součásti poskytnout manifest.V opačném případě však je Visual Studio schopno generovat manifest automaticky pro součást COM.Generování manifestu je provedeno během Procesu publikování ClickOnce; další informace naleznete v tématu Publikování aplikací ClickOnce. Tato funkce také umožňuje využít starší verzi součásti, kterou jste vytvořili ve starším vývojovém prostředí, jako jsou například Visual Basic 6.0.
Existují dva způsoby ja ClickOnce instaluje součásti COM:
Použití zaváděcího nástroje k nasazení součástí COM; tento postup funguje na všech podporovaných platformách.
Použijte nativní součást izolovaného nasazení (označované také jako bez-registrační COM).To však lze použít pouze na systému Windows XP nebo vyšším operačním systému.
Příklad izolace a nasazení jednoduché součásti COM
Za účelem ukázky bez-registračního nasazení součásti COM bude v tomto příkladu vytvořena aplikace pro systém Windows v jazyce Visual Basic, která odkazuje na izolovanou nativní součást COM vytvořenou pomocí jazyka Visual Basic 6.0 a nasazena pomocí ClickOnce.
Nejprve budete muset vytvořit nativní součást COM:
Chcete-li vytvořit nativní součást COM
Ve Visual Basic 6.0 z nabídky Soubor, klikněte na tlačítko Nový a pak projekt.
V dialogovém okně Nový projekt zvolte uzel Visual Basic a zvolte projekt ActiveX DLL.Do pole Název zadejte text VB6Ahoj.
[!POZNÁMKA]
Pouze projekty typu ActiveX DLL a ovládací prveky ActiveX jsou podporovány bez-registračním COM; technologie ActiveX EXE a ActiveX dokument nejsou podporovány.
V Průzkumníku řešení poklikejte Class1.VB k otevření textového editoru.
V Class1.vb přidejte následující kód za generovaný kód pro metodu New:
Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End Sub
Sestavení součásti.V nabídce Sestavit klikněte na příkaz Sestavit řešení.
[!POZNÁMKA]
Bez-registrační COM podporuje pouze knihovny DLL a projekty ovládacích prvků COM.EXE nelze použít s bez-registračním COM.
Nyní můžete vytvořit aplikaci pro systém Windows a přidat do ní odkaz na součást COM.
Chcete-li vytvořit aplikaci pro systém Windows pomocí součásti COM
Ve Visual Basicu v nabídce Soubor klikněte na tlačítko Nový a pak Projekt.
V dialogovém okně Nový projekt vyberte uzel Visual Basic a zvolte Aplikace pro systém Windows.Do pole Název zadejte RegFreeComDemo.
V Průzkumníku řešení klikněte na Zobrazit všechny soubory pro zobrazení odkazů projektu.
Klikněte pravým tlačítkem myši na uzel Odkazy a zvolte Přidat odkaz z kontextové nabídky.
V dialogovém okně Přidat odkaz klikněte na kartu Procházet a přejděte k VB6Ahoj.dll a vyberte jej.
Odkaz VB6Hello se zobrazí seznamu odkazů.
Přejděte na Panel nástrojů, označte prvek Tlačítko a přetáhněte jej do formuláře Form1.
V okně Vlastnosti nastavte vlastnost Text tlačítka na Ahoj.
Poklikejte na tlačítko Přidat kód pro obslužnou rutinu a ve zdrojovém souboru přidejte kód tak, aby obslužná rutina vypadala následovně:
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
Spusťte aplikaci.V nabídce Ladit klikněte na příkaz Spustit ladění.
Dále je třeba izolovat ovládací prvek.Každá součást COM, kterou Vaše aplikace používá, je v projektu představována jako odkaz COM.Tyto odkazy jsou zobrazeny v uzlu Odkazy v okně Průzkumníku řešení.(Všimněte si, že můžete přidat odkazy, buď přímo pomocí příkazu Přidat odkaz v nabídce Projekt nebo nepřímo přetažením ovládacího prvku ActiveX do formuláře.)
Následující kroky ukazují, jak izolovat součást COM a publikujte aktualizovanou aplikaci obsahující izolovaný ovládací prvek:
Chcete-li izolovat součást COM
V Průzkumníku řešení v uzlu Odkazy zvolte odkaz VB6Ahoj.
V okně Vlastnosti změňte hodnotu vlastnosti Izolované z hodnoty False na True.
V nabídce Sestavit klikněte na příkaz Sestavit řešení.
Nyní, když stisknete klávesu F5, aplikace pracuje podle očekávání, ale je nyní spuštěna pod bez-registračním COM.Chcete-li to prokázat, zkuste zrušit registraci součásti VB6Ahoj.dll a spustit RegFreeComDemo1.exe mimo prostředí Visual Studio.Nyní pokud je kliknuto na tlačítko, stále funguje.Pokud dočasně přejmenujete manifest aplikace, dojde opět k chybě.
[!POZNÁMKA]
Můžete simulovat absenci součásti COM dočasným rušením její registrace.Otevřte příkazový řádek, přejděte do systémové složky zadáním cd /d %windir%\system32, pak zrušte registraci součásti zadáním regsvr32 /u VB6Ahoj.dll.Můžete ji znovu zaregistrovat zadáním regsvr32 VB6Ahoj.dll.
Posledním krokem je publikovat aplikaci pomocí ClickOnce:
K publikování aktualizace aplikace s izolovanou součástí COM
V nabídce Sestavení klikněte na tlačítko Publikovat RegFreeComDemo.
Zobrazí se Průvodce Publikováním.
V Průvodci publikování zadejte umístění na disku místního počítače, kde můžete získat přístup a zkontrolujte publikované soubory.
Klikněte na Dokončit pro publikování aplikace.
Pokud prozkoumáte publikované soubory můžete zjistit, že je mezi nimi zahrnut soubor sysmon.ocx.Ovládací prvek je zcela izolován pro tuto aplikaci, což znamená, že pokud počítač koncového uživatele využívá jiné verze ovládacího prvku, nemůže rušit tuto aplikaci.
Odkazování na nativní sestavení
Visual Studio podporuje odkazy na nativní sestavení Visual Basic 6.0 nebo C++; tyto odkazy se nazývají nativní odkazy.Můžete zjistit, zda je odkaz nativní ověřením jeho nastavení jeho vlastnosti Typ souboru na hodnotu Nativní nebo ActiveX.
Chcete-li přidat nativní odkaz, použijte příkaz Přidat odkaz a potom vyhledejte manifest.Některé součásti umísťují manifest uvnitř knihovny DLL.V tomto případě můžete jednoduše zvolit knihovnu DLL sámi a Visual Studio ji přidá jako nativní odkaz pokud zjistí, že součást obsahuje vložený manifest.Visual Studio také automaticky zahrne všechny závislé soubory nebo sestavení uvedené v manifestu, pokud jsou ve stejné složce jako odkazovaná součást.
Izolování ovládacího prvku COM usnadňuje nasazení součástí COM, které již nemají manifesty.Nicméně jestliže je komponenta opatřena manifestem, můžete odkazovat manifest přímo.Ve skutečnosti byste měli vždy používat manifest poskytnutý autorem součásti, spíše než používat vlastnost Izolace.
Omezení nasazení bez-registrační součásti COM
Bez-registrační COM poskytuje jasné výhody oproti tradičním technikám nasazení.Existuje však několik omezení a výhrad, které je třeba také zdůraznit.Největším omezením je, že pracuje pouze v systému Windows XP nebo vyšším.Implementace bez-registračního COM vyžaduje změnu způsobu, jakým jsou součásti načítány do jádra operačního systému.Bohužel neexistuje žádná nižší úroveň podpory pro bez-registrační COM.
Ne každá součást je vhodným kandidátem pro bez-registrační COM.Součást není vhodná, pokud je splněna některá z následujících podmínek:
Komponenta je mimo-procesní server.EXE servery nejsou podporovány; jsou podporovány pouze knihovny DLL.
Součást je částí operačního systému nebo je systémovou součástí, jako například XML, Internet Explorer nebo Microsoft Data Access Components (MDAC).Postupujte podle zásad přerozdělení autora součásti; zjistěte u dodavatele.
Součást je částí aplikace jako třeba Microsoft Office.Například byste se neměli snažit izolovat objektový model aplikace Microsoft Excel.Tento je součástí Microsoft Office a lze použít pouze na počítači s plnou instalací Microsoft Office.
Součást je určena pro použití jako doplněk nebo snap-in modul, například Office add-in nebo ovládací prvek ve webovém prohlížeči.Tyto součásti obvykle vyžadují určitý druh registračního schématu definovaného pomocí hostitelského prostředí, které je nad rámec samotného manifestu.
Součást spravuje fyzické nebo virtuální zařízení systému, například ovladač zařízení pro službu zařazování tisku.
Součást je datově redistribuovatelná.Datové aplikace obecně vyžadují oddělené datové redistribuovatelnosti nainstalované před jejich spuštěním.Neměli byste se snažit izolovat součásti, jako je například datový ovládací prvek Microsoft ADO, Microsoft OLE DB nebo Microsoft Data Access Components (MDAC).Místo toho, pokud Vaše aplikace používá MDAC nebo SQL Server Express, je třeba je nastavit jako požadavky, viz Postupy: Instalace předpokladů s aplikací ClickOnce.
V některých případech může být pro vývojáře součásti možné změnit její návrh pro bez-registrační COM.Není-li to možné, lze nadále vytvářet a publikovat aplikace, které závisí na standardní registraci pomocí zaváděcího nástroje.Další informace naleznete v tématu Vytváření balíčků zaváděcího nástroje.
Součást COM lze izolovat pouze jednou v určité aplikaci.Například nelze izolovat stejnou součást COM ze dvou různých projektů Knihoven tříd, které jsou součástí stejné aplikace.To bude mít za následek varování při sestavení a aplikaci se nezdaří načtení.Chcete-li se tomuto problému vyhnout, společnost Microsoft doporučuje zapouzdření součásti COM do jediné knihovny tříd.
Existuje několik možností, kde je požadována registrace COM na počítači vývojáře, přestože nasazení aplikace nevyžaduje registraci.Vlastnost Isolated vyžaduje, aby součást COM byla registrována na počítači vývojáře za účelem automatického generování manifestu během sestavení. Neexistují žádné možnosti zachytávání registrací, které vyvolává automatická registrace během sestavení.Také některé třídy, které nejsou explicitně definovány v knihovně typů, se neodrazí v manifestu.Při použití součásti COM s již existujícím manifestem, například nativní odkaz, součást nemusí být registrována v době vývoje.Nicméně je požadována registrace, pokud je součást ovládací prvek ActiveX a chcete jej zahrnout do Panelu nástrojů a Návrháře formulářů.