Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Distribution av äldre COM-komponenter har traditionellt varit en svår uppgift. Komponenter måste vara globalt registrerade och kan därmed orsaka oönskade biverkningar mellan överlappande program. Den här situationen är vanligtvis inte ett problem i .NET Framework-program eftersom komponenter är helt isolerade till ett program eller är sida vid sida-kompatibla. Med Visual Studio kan du distribuera isolerade COM-komponenter i Windows-operativsystemet.
ClickOnce är en enkel och säker mekanism för att distribuera .NET-program. Men om dina program använder äldre COM-komponenter måste du vidta ytterligare åtgärder för att distribuera dem. Det här avsnittet beskriver hur du distribuerar isolerade COM-komponenter och refererar till interna komponenter (till exempel från Visual Basic 6.0 eller Visual C++).
Mer information om hur du distribuerar isolerade COM-komponenter finns i Förenkla appdistribution med ClickOnce och Registration-Free COM.
Registreringsfri COM
Registreringsfri COM är en ny teknik för att distribuera och aktivera isolerade COM-komponenter. Det fungerar genom att lägga till alla komponentens typbiblioteks- och registreringsinformation som vanligtvis installeras i systemregistret i en XML-fil som kallas ett manifest som lagras i samma mapp som programmet.
För att isolera en COM-komponent krävs att den registreras på utvecklarens dator, men den behöver inte registreras på slutanvändarens dator. Om du vill isolera en COM-komponent behöver du bara ange referensens isolerade egenskap till True. Som standard är den här egenskapen inställd på False, vilket anger att den ska behandlas som en registrerad COM-referens. Om den här egenskapen är True genereras ett manifest för den här komponenten vid byggtiden. Det gör också att motsvarande filer kopieras till programmappen under installationen.
När manifestgeneratorn stöter på en isolerad COM-referens räknar den upp alla CoClass poster i komponentens typbibliotek, matchar varje post med motsvarande registreringsdata och genererar manifestdefinitioner för alla COM-klasser i typbiblioteksfilen.
Distribuera registreringsfria COM-komponenter med ClickOnce
ClickOnce-distributionstekniken passar bra för att distribuera isolerade COM-komponenter, eftersom både ClickOnce och registreringsfria COM kräver att en komponent har ett manifest för att kunna distribueras.
Vanligtvis bör komponentens författare tillhandahålla ett manifest. Om inte kan Dock Visual Studio generera ett manifest automatiskt för en COM-komponent. Manifestgenereringen utförs under ClickOnce-publiceringsprocessen. Mer information finns i Publicera ClickOnce-program. Med den här funktionen kan du också använda äldre komponenter som du skapade i tidigare utvecklingsmiljöer, till exempel Visual Basic 6.0.
Det finns två sätt som ClickOnce distribuerar COM-komponenter på:
Använd bootstrappern för att distribuera dina COM-komponenter. Detta fungerar på alla plattformar som stöds.
Använd intern komponentisolering (kallas även för registreringsfri COM)-distribution.
Exempel på att isolera och distribuera en enkel COM-komponent
För att demonstrera registreringsfri COM-komponentdistribution skapar det här exemplet ett Windows-baserat program i Visual Basic som refererar till en isolerad inbyggd COM-komponent som skapats med Visual Basic 6.0 och distribuerar den med Hjälp av ClickOnce.
Först måste du skapa den interna COM-komponenten:
Så här skapar du en inbyggd COM-komponent
I Visual Basic 6.0 klickar du på Nytt på Arkiv-menyn och sedan på Projekt.
I dialogrutan Nytt projekt väljer du noden Visual Basic och väljer ett ActiveX DLL-projekt . I rutan Namn skriver du
VB6Hello.Anmärkning
Endast projekttyperna ActiveX DLL och ActiveX Control stöds med registreringsfri COM. Projekttyperna ActiveX EXE och ActiveX Document stöds inte.
Dubbelklicka på Class1.vb i Solution Explorer för att öppna textredigeraren.
I Class1.vb lägger du till följande kod efter den genererade koden för
Newmetoden:Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End SubSkapa komponenten. På menyn Skapa klickar du på Skapa lösning.
Anmärkning
Registreringsfri COM stöder endast DLL-filer och COM-kontroller för projekttyper. Du kan inte använda EXE:er med registreringsfri COM.
Nu kan du skapa ett Windows-baserat program och lägga till en referens till COM-komponenten i det.
Så här skapar du ett Windows-baserat program med hjälp av en COM-komponent
I Visual Basic går du till arkivmenyn och klickar på Nytt och sedan på Projekt.
I dialogrutan Nytt projekt väljer du noden Visual Basic och väljer Windows-program. I rutan Namn skriver du
RegFreeComDemo.I Solution Explorer klickar du på knappen Visa alla filer för att visa projektreferenserna.
Högerklicka på noden Referenser och välj Lägg till referens på snabbmenyn.
I dialogrutan Lägg till referens klickar du på fliken Bläddra , navigerar till VB6Hello.dlloch väljer den.
En referens för VB6Hello visas i referenslistan.
Peka på verktygslådan, välj en knappkontroll och dra den till formuläret Form1 .
I fönstret Egenskaper anger du knappens textegenskap till Hello.
Dubbelklicka på knappen för att lägga till hanteringskod och lägg till kod i kodfilen så att hanteraren läser på följande sätt:
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 SubKör programmet. På felsökningsmenyn klickar du på Starta felsökning.
Därefter måste du isolera kontrollen. Varje COM-komponent som ditt program använder representeras i projektet som en COM-referens. Dessa referenser visas under noden Referenser i Solution Explorer-fönstret . (Observera att du kan lägga till referenser antingen direkt med kommandot Lägg till referens på Projekt-menyn eller indirekt genom att dra en ActiveX-kontroll till formuläret.)
Följande steg visar hur du isolerar COM-komponenten och publicerar det uppdaterade programmet som innehåller den isolerade kontrollen:
Isolera en COM-komponent
I Solution Explorer går du till noden Referenser och väljer VB6Hello-referensen .
I fönstret Egenskaper ändrar du värdet för egenskapen Isolerad från False till True.
På menyn Skapa klickar du på Skapa lösning.
Nu, när du trycker på F5, fungerar programmet som förväntat, men det körs nu under registreringsfri COM. För att bevisa detta kan du prova att avregistrera VB6Hello.dll komponenten och köra RegFreeComDemo1.exe utanför Visual Studio IDE. Den här gången när knappen klickas fungerar den fortfarande. Om du tillfälligt byter namn på programmanifestet misslyckas det igen.
Anmärkning
Du kan simulera frånvaron av en COM-komponent genom att tillfälligt avregistrera den. Öppna en kommandotolk, gå till systemmappen genom att cd /d %windir%\system32skriva och avregistrera sedan komponenten genom att regsvr32 /u VB6Hello.dllskriva . Du kan registrera den igen genom att regsvr32 VB6Hello.dllskriva .
Det sista steget är att publicera programmet med Hjälp av ClickOnce:
Publicera en programuppdatering med en isolerad COM-komponent
På menyn Skapa klickar du på Publicera RegFreeComDemo.
Publiceringsguiden visas.
I publiceringsguiden anger du en plats på den lokala datorns disk där du kan komma åt och granska de publicerade filerna.
Klicka på Slutför för att publicera programmet.
Om du undersöker de publicerade filerna noterar du att filen sysmon.ocx ingår. Kontrollen är helt isolerad till det här programmet, vilket innebär att om slutanvändarens dator har ett annat program som använder en annan version av kontrollen kan den inte störa det här programmet.
Referens för interna sammansättningar
Visual Studio stöder referenser till interna Visual Basic 6.0- eller C++-sammansättningar. sådana referenser kallas interna referenser. Du kan se om en referens är inbyggd genom att kontrollera att dess filtypsegenskap är inställd på Native eller ActiveX.
Om du vill lägga till en intern referens använder du kommandot Lägg till referens och bläddrar sedan till manifestet. Vissa komponenter placerar manifestet i DLL-filen. I det här fallet kan du helt enkelt välja själva DLL-filen så lägger Visual Studio till den som en intern referens om den identifierar att komponenten innehåller ett inbäddat manifest. Visual Studio inkluderar också automatiskt alla beroende filer eller sammansättningar som anges i manifestet om de finns i samma mapp som den refererade komponenten.
COM-kontrollisolering gör det enkelt att distribuera COM-komponenter som inte redan har manifest. Men om en komponent levereras med ett manifest kan du referera till manifestet direkt. I själva verket bör du alltid använda manifestet som tillhandahålls av komponentens författare där det är möjligt i stället för att använda egenskapen Isolerad .
Begränsningar av registreringsfri COM-komponentdistribution
Registreringsfri COM ger tydliga fördelar jämfört med traditionella distributionstekniker.
Inte alla komponenter är en lämplig kandidat för registreringsfri COM. En komponent är inte lämplig om något av följande är sant:
Komponenten är en out-of-process-server. EXE-servrar stöds inte. endast DLL:er stöds.
Komponenten är en del av operativsystemet eller är en systemkomponent, till exempel XML, en webbläsarkomponent eller Microsoft Data Access Components (MDAC). Du bör följa omdistributionsprincipen för komponentförfattaren. kontakta leverantören.
Komponenten är en del av ett program, till exempel Microsoft Office. Du bör till exempel inte försöka isolera Microsoft Excel-objektmodell. Detta är en del av Office och kan endast användas på en dator med den fullständiga Office-produkten installerad.
Komponenten är avsedd att användas som ett tillägg eller en snapin-modul, till exempel ett Office-tillägg eller en kontroll i en webbläsare. Sådana komponenter kräver vanligtvis någon form av registreringsschema som definieras av värdmiljön och som ligger utanför själva manifestets omfång.
Komponenten hanterar en fysisk eller virtuell enhet för systemet, till exempel en drivrutin för en utskriftsbuffert.
Komponenten är en omdistribuerbar dataåtkomst. Dataprogram kräver vanligtvis att en separat omdistribuerbar dataåtkomst installeras innan de kan köras. Du bör inte försöka isolera komponenter som Microsoft ADO Data Control, Microsoft OLE DB eller Microsoft Data Access Components (MDAC). Om ditt program i stället använder MDAC eller SQL Server Express bör du ange dem som förutsättningar. se Anvisningar: Installera förutsättningar med ett ClickOnce-program.
I vissa fall kan det vara möjligt för utvecklaren av komponenten att göra om den för registreringsfri COM. Om detta inte är möjligt kan du fortfarande skapa och publicera program som är beroende av dem via standardregistreringsschemat med hjälp av Bootstrapper. Mer information finns i Skapa Bootstrapper-paket.
En COM-komponent kan bara isoleras en gång per program. Du kan till exempel inte isolera samma COM-komponent från två olika klassbiblioteksprojekt som ingår i samma program. Detta resulterar i en byggvarning och programmet kan inte läsas in vid körning. För att undvika det här problemet rekommenderar Microsoft att du kapslar in COM-komponenter i ett enda klassbibliotek.
Det finns flera scenarier där COM-registrering krävs på utvecklarens dator, även om programmets distribution inte kräver registrering. Egenskapen
Isolatedkräver att COM-komponenten registreras på utvecklarens dator för att automatiskt generera manifestet under bygget. Det finns inga registreringsfunktioner som anropar självregistrering under kompileringen. Dessutom återspeglas inte några klasser som inte uttryckligen definierats i typbiblioteket i manifestet. När du använder en COM-komponent med ett befintligt manifest, till exempel en intern referens, kanske komponenten inte behöver registreras vid utvecklingstillfället. Registrering krävs dock om komponenten är en ActiveX-kontroll och du vill inkludera den i verktygslådan och Windows Forms-designern.