Nasazování komponent COM s ClickOnce

Nasazení starších komponent modelu COM bylo tradičně obtížné. Komponenty musí být globálně registrovány, a proto mohou způsobit nežádoucí vedlejší účinky mezi překrývajícími se aplikacemi. Tato situace obecně není problém v aplikacích rozhraní .NET Framework, protože komponenty jsou zcela izolované od aplikace nebo jsou kompatibilní vedle sebe. Visual Studio umožňuje nasadit izolované komponenty modelu COM v operačním systému Windows.

ClickOnce poskytuje snadný a bezpečný mechanismus pro nasazení aplikací .NET. Pokud ale vaše aplikace používají starší komponenty MODELU COM, budete muset provést další kroky pro jejich nasazení. Toto téma popisuje, jak nasadit izolované komponenty modelu COM a odkazovat na nativní komponenty (například z jazyka Visual Basic 6.0 nebo Visual C++).

Další informace o nasazení izolovaných komponent MODELU COM naleznete v tématu Zjednodušení nasazení aplikací pomocí ClickOnce a modelu COM bez registrace.

Com bez registrace

Com bez registrace je nová technologie pro nasazení a aktivaci izolovaných komponent modelu COM. Funguje tak, že všechny informace o typu a registraci komponenty, které jsou obvykle nainstalovány do systémového registru, do souboru XML označovaného jako manifest, který je uložený ve stejné složce jako aplikace.

Izolování komponenty modelu COM vyžaduje, aby byla zaregistrovaná na počítači vývojáře, ale nemusí být zaregistrovaná na počítači koncového uživatele. Pokud chcete izolovat komponentu MODELU COM, stačí nastavit její vlastnost Isolated na Hodnotu True. Ve výchozím nastavení je tato vlastnost nastavena na False, což znamená, že by měla být považována za registrovaný odkaz modelu COM. Pokud je tato vlastnost True, způsobí generování manifestu pro tuto komponentu v době sestavení. Také způsobí zkopírování odpovídajících souborů do složky aplikace během instalace.

Když generátor manifestu narazí na izolovaný odkaz modelu COM, vytvoří výčet všech CoClass položek v knihovně typů komponenty, porovnávání každé položky s odpovídajícími registračními daty a generování definic manifestu pro všechny třídy MODELU COM v souboru knihovny typů.

Nasazení komponent modelu COM bez registrace pomocí ClickOnce

Technologie nasazení ClickOnce je vhodná pro nasazení izolovaných komponent MODELU COM, protože technologie COM bez registrace i ClickOnce vyžadují, aby komponenta měla k nasazení manifest.

Autor komponenty by obvykle měl poskytnout manifest. Pokud tomu tak není, sada Visual Studio dokáže automaticky vygenerovat manifest pro komponentu COM. Generování manifestu se provádí během procesu publikování ClickOnce; Další informace naleznete v tématu Publikování aplikací ClickOnce. Tato funkce také umožňuje využívat starší komponenty, které jste vytvořili v dřívějších vývojových prostředích, jako je Visual Basic 6.0.

ClickOnce nasazuje komponenty modelu COM dvěma způsoby:

  • Pomocí bootstrapperu nasaďte komponenty MODELU COM; funguje na všech podporovaných platformách.

  • Použijte izolaci nativních komponent (označovanou také jako nasazení modelu COM bez registrace).

Příklad izolace a nasazení jednoduché komponenty MODELU COM

Aby bylo možné předvést nasazení komponenty MODELU COM bez registrace, tento příklad vytvoří aplikaci založenou na systému Windows v jazyce Visual Basic, která odkazuje na izolovanou nativní komponentu COM vytvořenou pomocí jazyka Visual Basic 6.0 a nasadí ji pomocí ClickOnce.

Nejprve budete muset vytvořit nativní komponentu MODELU COM:

Vytvoření nativní komponenty modelu COM
  1. Pomocí jazyka Visual Basic 6.0 v nabídce Soubor klepněte na příkaz Nový a potom Na projektu.

  2. V dialogovém okně Nový projekt vyberte uzel jazyka Visual Basic a vyberte projekt knihovny DLL technologie ActiveX. Do pole Název zadejte VB6Hello.

    Poznámka:

    U modelu COM bez registrace jsou podporovány pouze typy projektů technologie ActiveX DLL a technologie ActiveX Control; technologie ActiveX exe a technologie ActiveX typy projektů dokumentů nejsou podporovány.

  3. V Průzkumník řešení poklikáním otevřete textový editor poklikáním na Class1.vb.

  4. V Class1.vb přidejte následující kód za vygenerovaný kód pro metodu New :

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Sestavte komponentu. V nabídce Sestavení klikněte na Sestavit řešení.

Poznámka:

Registrace modelu COM podporuje pouze knihovny DLL a typy projektů ovládacích prvků MODELU COM. S com bez registrace nemůžete používat exe.

Teď můžete vytvořit aplikaci založenou na systému Windows a přidat do ní odkaz na komponentu COM.

Vytvoření aplikace založené na Systému Windows pomocí komponenty MODELU COM
  1. Pomocí jazyka Visual Basic v nabídce Soubor klepněte na příkaz Nový a potom Na projektu.

  2. V dialogovém okně Nový projekt vyberte uzel Jazyka Visual Basic a vyberte Aplikaci systému Windows. Do pole Název zadejte RegFreeComDemo.

  3. V Průzkumník řešení kliknutím na tlačítko Zobrazit všechny soubory zobrazte odkazy na projekt.

  4. Klikněte pravým tlačítkem myši na uzel Odkazy a v místní nabídce vyberte Přidat odkaz .

  5. V dialogovém okně Přidat odkaz klikněte na kartu Procházet , přejděte na VB6Hello.dll a vyberte ji.

    V seznamu odkazů se zobrazí odkaz VB6Hello .

  6. Přejděte na panel nástrojů, vyberte ovládací prvek Tlačítko a přetáhněte ho do formuláře Form1.

  7. V okně Vlastnosti nastavte vlastnost Text tlačítka na Hello.

  8. Poklikáním na tlačítko přidejte kód obslužné rutiny a do souboru kódu přidejte kód tak, aby obslužná rutina četla takto:

    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
    
  9. Aplikaci spusťte. V nabídce Ladění klepněte na tlačítko Spustit ladění.

    Dále je potřeba ovládací prvek izolovat. Každá komponenta MODELU COM, kterou vaše aplikace používá, je ve vašem projektu reprezentována jako odkaz modelu COM. Tyto odkazy jsou viditelné v uzlu Odkazy v okně Průzkumník řešení. (Všimněte si, že odkazy můžete přidat buď přímo pomocí Příkaz Přidat odkaz v nabídce Projekt nebo nepřímo přetažením ovládacího prvku technologie ActiveX do formuláře.)

    Následující kroky ukazují, jak izolovat komponentu COM a publikovat aktualizovanou aplikaci obsahující izolovaný ovládací prvek:

Izolace komponenty modelu COM
  1. V Průzkumník řešení v uzlu Reference vyberte odkaz VB6Hello.

  2. V okně Vlastnosti změňte hodnotu izolované vlastnosti z False na True.

  3. V nabídce Sestavení klikněte na Sestavit řešení.

    Když teď stisknete klávesu F5, aplikace funguje podle očekávání, ale teď běží v rámci modelu COM bez registrace. Pokud to chcete prokázat, zkuste zrušit registraci komponenty VB6Hello.dll a spustit RegFreeComDemo1.exe mimo integrované vývojové prostředí sady Visual Studio. Tentokrát, když na tlačítko kliknete, stále funguje. Pokud dočasně přejmenujete manifest aplikace, znovu se nezdaří.

Poznámka:

Absenci komponenty MODELU COM můžete simulovat tak, že ji dočasně zrušíte. Otevřete příkazový řádek, přejděte do systémové složky zadáním cd /d %windir%\system32a pak odregistrujte komponentu zadáním regsvr32 /u VB6Hello.dll. Můžete ho znovu zaregistrovat zadáním regsvr32 VB6Hello.dll.

Posledním krokem je publikování aplikace pomocí Technologie ClickOnce:

Publikování aktualizace aplikace s izolovanou komponentou modelu COM
  1. V nabídce Sestavení klepněte na tlačítko Publikovat RegFreeComDemo.

    Zobrazí se Průvodce publikováním.

  2. V Průvodci publikováním zadejte umístění na disku místního počítače, kde můžete přistupovat k publikovaným souborům a zkoumat je.

  3. Kliknutím na tlačítko Dokončit publikujete aplikaci.

    Pokud prozkoumáte publikované soubory, všimněte si, že soubor sysmon.ocx je součástí. Ovládací prvek je zcela izolovaný pro tuto aplikaci, což znamená, že pokud má počítač koncového uživatele jinou aplikaci používající jinou verzi ovládacího prvku, nemůže narušovat tuto aplikaci.

Referenční nativní sestavení

Visual Studio podporuje odkazy na nativní sestavení jazyka Visual Basic 6.0 nebo C++; tyto odkazy se nazývají nativní odkazy. To, jestli je odkaz nativní, zjistíte tak, že ověříte, jestli je jeho vlastnost Typ souboru nastavená na Native nebo technologie ActiveX.

Pokud chcete přidat nativní odkaz, použijte příkaz Přidat odkaz a přejděte do manifestu. Některé komponenty umístí manifest do knihovny DLL. V tomto případě můžete jednoduše zvolit samotnou knihovnu DLL a Visual Studio ji přidá jako nativní odkaz, pokud zjistí, že komponenta 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á komponenta.

Izolace ovládacích prvků modelu COM usnadňuje nasazení komponent modelu COM, které ještě nemají manifesty. Pokud je však součástí součástí manifestu, můžete na manifest odkazovat přímo. Ve skutečnosti byste měli vždy použít manifest poskytnutý autorem komponenty všude, kde je to možné, místo použití izolované vlastnosti.

Omezení nasazení komponent MODELU COM bez registrace

Model COM bez registrace poskytuje jasné výhody oproti tradičním technikám nasazení.

Ne každá komponenta je vhodným kandidátem pro registraci modelu COM. Komponenta není vhodná, pokud je splněna některá z následujících skutečností:

  • Komponenta je mimo procesový server. Exe servery nejsou podporovány; Podporují se pouze knihovny DLL.

  • Komponenta je součástí operačního systému nebo je systémovou komponentou, například XML, komponentou prohlížeče nebo komponentami MDAC (Microsoft Data Access Components). Měli byste postupovat podle zásad redistribuce autora komponenty; obraťte se na dodavatele.

  • Komponenta je součástí aplikace, například systém Microsoft Office. Neměli byste se například pokoušet izolovat objektový model aplikace Microsoft Excel. Je součástí Office a dá se používat jenom na počítači s nainstalovaným úplným produktem Office.

  • Součást je určená k použití jako doplněk nebo modul snap-in, například doplněk Office nebo ovládací prvek ve webovém prohlížeči. Tyto komponenty obvykle vyžadují určitý druh registračního schématu definovaného hostitelským prostředím, které je nad rámec samotného manifestu.

  • Komponenta spravuje fyzické nebo virtuální zařízení pro systém, například ovladač zařízení pro zařazování tisku.

  • Komponenta je redistribuovatelný přístup k datům. Datové aplikace obecně vyžadují, aby byly před spuštěním nainstalovány samostatné redistribuce Data Accessu. Neměli byste se pokoušet izolovat součásti, jako je například ovládací prvek Microsoft ADO Data Control, Microsoft OLE DB nebo Microsoft Data Access Components (MDAC). Místo toho, pokud vaše aplikace používá MDAC nebo SQL Server Express, měli byste je nastavit jako požadavky; Viz Postupy: Instalace předpokladů pomocí aplikace ClickOnce.

    V některých případech může být možné, aby vývojář komponenty přepracovali model COM bez registrace. Pokud to není možné, můžete aplikace, které na nich závisejí, vytvářet a publikovat prostřednictvím standardního registračního schématu pomocí bootstrapperu. Další informace naleznete v tématu Vytváření balíčků bootstrapperu.

    Komponentu COM lze izolovat pouze jednou pro každou aplikaci. Nemůžete například izolovat stejnou komponentu MODELU COM od dvou různých projektů knihovny tříd, které jsou součástí stejné aplikace. Výsledkem bude upozornění na sestavení a aplikace se nepodaří načíst za běhu. Aby se zabránilo tomuto problému, společnost Microsoft doporučuje zapouzdření součástí modelu COM v knihovně s jednou třídou.

    V počítači vývojáře se vyžaduje registrace modelu COM v několika scénářích, i když nasazení aplikace nevyžaduje registraci. Tato Isolated vlastnost vyžaduje, aby byla komponenta COM zaregistrovaná na počítači vývojáře, aby se během sestavení automaticky vygeneroval manifest. Během sestavení nejsou k dispozici žádné možnosti zachytávání registrací, které vyvolávají samoobslužnou registraci. V manifestu se také neprojeví žádné třídy, které nejsou explicitně definovány v knihovně typů. Při použití komponenty MODELU COM s již existujícím manifestem, jako je nativní odkaz, nemusí být komponenta zaregistrovaná v době vývoje. Registrace se ale vyžaduje, pokud je součástí technologie ActiveX ovládací prvek a chcete ji zahrnout do panelu nástrojů a návrháře model Windows Forms.