Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A implantação de componentes COM herdados tem sido tradicionalmente uma tarefa difícil. Os componentes precisam ser registrados globalmente e, portanto, podem causar efeitos colaterais indesejáveis entre aplicações sobrepostas. Essa situação geralmente não é um problema em aplicativos .NET Framework porque os componentes são completamente isolados para um aplicativo ou são compatíveis lado a lado. Visual Studio permite que você implante componentes COM isolados no sistema operacional Windows.
ClickOnce fornece um mecanismo fácil e seguro para implantar seus aplicativos .NET. No entanto, se seus aplicativos usam componentes COM herdados, você precisará executar etapas adicionais para implantá-los. Este tópico descreve como implantar componentes COM isolados e componentes nativos de referência (por exemplo, do Visual Basic 6.0 ou Visual C++).
Para obter mais informações sobre como implantar componentes COM isolados, consulte Simplificar a implantação de aplicativos com ClickOnce e Registration-Free COM.
COM sem registo
A COM sem registro é uma nova tecnologia para implantar e ativar componentes COM isolados. Ele funciona colocando todas as informações de registro e biblioteca de tipos do componente que normalmente são instaladas no registro do sistema em um arquivo XML chamado manifesto, armazenado na mesma pasta que o aplicativo.
Isolar um componente COM requer que ele seja registrado na máquina do desenvolvedor, mas não precisa ser registrado no computador do usuário final. Para isolar um componente COM, tudo o que você precisa fazer é definir a propriedade Isolated de sua referência como True. Por padrão, essa propriedade é definida como False, indicando que ela deve ser tratada como uma referência COM registrada. Se essa propriedade for True, ela fará com que um manifesto seja gerado para esse componente em tempo de compilação. Ele também faz com que os arquivos correspondentes sejam copiados para a pasta do aplicativo durante a instalação.
Quando o gerador de manifesto encontra uma referência COM isolada, ele enumera todas as CoClass entradas na biblioteca de tipos do componente, combinando cada entrada com seus dados de registro correspondentes e gerando definições de manifesto para todas as classes COM no arquivo de biblioteca de tipos.
Implante componentes COM sem registro usando o ClickOnce
A tecnologia de implantação ClickOnce é adequada para implantar componentes COM isolados, porque tanto o ClickOnce quanto o COM sem registro exigem que um componente tenha um manifesto para ser implantado.
Normalmente, o autor do componente deve fornecer um manifesto. Se não, no entanto, Visual Studio é capaz de gerar um manifesto automaticamente para um componente COM. A geração de manifesto é realizada durante o processo de publicação ClickOnce; para obter mais informações, consulte Publicando aplicativos ClickOnce. Esse recurso também permite que você aproveite componentes herdados que você criou em ambientes de desenvolvimento anteriores, como o Visual Basic 6.0.
Há duas maneiras pelas quais o ClickOnce implanta componentes COM:
Use o bootstrapper para implantar seus componentes COM; Isso funciona em todas as plataformas suportadas.
Utilize a implantação de isolamento de componentes nativos (também conhecido como COM sem necessidade de registro).
Exemplo de isolamento e implantação de um componente COM simples
Para demonstrar a implantação do componente COM sem registro, este exemplo criará um aplicativo baseado no Windows no Visual Basic que faz referência a um componente COM nativo isolado criado usando o Visual Basic 6.0 e implantá-lo usando ClickOnce.
Primeiro, você precisará criar o componente COM nativo:
Para criar um componente COM nativo
Usando o Visual Basic 6.0, no menu Arquivo , clique em Novo e, em seguida, em Projeto.
Na caixa de diálogo Novo projeto , selecione o nó Visual Basic e selecione um projeto ActiveX DLL . Na caixa Nome , digite
VB6Hello.Observação
Somente os tipos de projeto ActiveX DLL e ActiveX Control são suportados com COM sem registro; Os tipos de projeto ActiveX EXE e ActiveX Document não são suportados.
No Gerenciador de Soluções, clique duas vezes em Class1.vb para abrir o editor de texto.
No Class1.vb, adicione o seguinte código após o código gerado para o
Newmétodo:Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End SubConstrua o componente. No menu Build , clique em Build Solution.
Observação
COM sem registo suporta apenas DLLs e tipos de projeto de controlos COM. Não é possível usar EXEs com COM sem registro.
Agora você pode criar um aplicativo baseado no Windows e adicionar uma referência ao componente COM a ele.
Para criar um aplicativo baseado no Windows usando um componente COM
Usando o Visual Basic, no menu Arquivo , clique em Novo e, em seguida, em Projeto.
Na caixa de diálogo Novo Projeto, selecione o nó Visual Basic e selecione Aplicação Windows. Na caixa Nome , digite
RegFreeComDemo.No Gerenciador de Soluções, clique no botão Mostrar Todos os Arquivos para exibir as referências do projeto.
Clique com o botão direito do mouse no nó Referências e selecione Adicionar referência no menu de contexto.
Na caixa de diálogo Adicionar Referência , clique no separador Procurar , navegue até VB6Hello.dlle, em seguida, selecione-o.
Uma referência VB6Hello aparece na lista de referências.
Aponte para a Caixa de Ferramentas, selecione um controle Button e arraste-o para o formulário Form1 .
Na janela Propriedades , defina a propriedade Text do botão como Olá.
Clique duas vezes no botão para adicionar o código do manipulador e, no arquivo de código, adicione código para que o manipulador leia o seguinte:
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 SubExecute o aplicativo. No menu Depurar , clique em Iniciar Depuração.
Em seguida, você precisa isolar o controle. Cada componente COM que seu aplicativo usa é representado em seu projeto como uma referência COM. Essas referências são visíveis no nó Referências na janela Gerenciador de Soluções . (Observe que você pode adicionar referências diretamente usando o comando Adicionar referência no menu Projeto ou indiretamente arrastando um controle ActiveX para o formulário.)
As etapas a seguir mostram como isolar o componente COM e publicar o aplicativo atualizado que contém o controle isolado:
Para isolar um componente COM
No Gerenciador de Soluções, no nó Referências , selecione a referência VB6Hello .
Na janela Propriedades , altere o valor da propriedade Isolated de False para True.
No menu Build , clique em Build Solution.
Agora, quando você pressiona F5, o aplicativo funciona conforme o esperado, mas agora está sendo executado em COM sem registro. Para provar isso, tente cancelar o registro do componente VB6Hello.dll e executar RegFreeComDemo1.exe fora do IDE do Visual Studio. Desta vez, quando o botão é clicado, ele ainda funciona. Se você renomear temporariamente o manifesto do aplicativo, ele falhará novamente.
Observação
Você pode simular a ausência de um componente COM cancelando temporariamente o registro. Abra um prompt de comando, vá para a pasta do sistema digitando cd /d %windir%\system32e, em seguida, cancele o registro do componente digitando regsvr32 /u VB6Hello.dll. Você pode registrá-lo novamente digitando regsvr32 VB6Hello.dll.
A etapa final é publicar o aplicativo usando ClickOnce:
Para publicar uma atualização de aplicativo com um componente COM isolado
No menu Build , clique em Publish RegFreeComDemo.
O Assistente de publicação é exibido.
No Assistente de publicação, especifique um local no disco do computador local onde você pode acessar e examinar os arquivos publicados.
Clique em Concluir para publicar o aplicativo.
Se você examinar os arquivos publicados, você notará que o arquivo sysmon.ocx está incluído. O controle é totalmente isolado para este aplicativo, o que significa que se a máquina do usuário final tem outro aplicativo usando uma versão diferente do controle, ele não pode interferir com este aplicativo.
Fazer referência a assemblies nativos
Visual Studio oferece suporte a referências a assemblies nativos do Visual Basic 6.0 ou C++; tais referências são chamadas de referências nativas. Você pode saber se uma referência é nativa verificando se sua propriedade File Type está definida como Native ou ActiveX.
Para adicionar uma referência nativa, use o comando Adicionar referência e navegue até o manifesto. Alguns componentes colocam o manifesto dentro da DLL. Nesse caso, você pode simplesmente escolher a própria DLL e o Visual Studio irá adicioná-la como uma referência nativa se detetar que o componente contém um manifesto incorporado. O Visual Studio também incluirá automaticamente quaisquer arquivos dependentes ou assemblies listados no manifesto se eles estiverem na mesma pasta que o componente referenciado.
O isolamento de controle COM torna a implantação de componentes COM que ainda não têm manifestos mais fácil. No entanto, se um componente for fornecido com um manifesto, você poderá fazer referência ao manifesto diretamente. Na verdade, você deve sempre usar o manifesto fornecido pelo autor do componente sempre que possível, em vez de usar a propriedade Isolated .
Limitações da implantação de componentes COM sem registro
A OCM sem registo proporciona vantagens claras em relação às técnicas de implantação tradicionais.
Nem todos os componentes são candidatos adequados para COM sem registo. Um componente não é adequado se qualquer uma das seguintes situações for verdadeira:
O componente é um servidor fora de processo. Não há suporte para servidores EXE; apenas DLLs são suportadas.
O componente faz parte do sistema operacional ou é um componente do sistema, como XML, um componente do navegador ou o Microsoft Data Access Components (MDAC). Você deve seguir a política de redistribuição do autor do componente; Verifique com o seu fornecedor.
O componente faz parte de um aplicativo, como o Microsoft Office. Por exemplo, você não deve tentar isolar o modelo de objeto do Microsoft Excel. Isso faz parte do Office e só pode ser usado em um computador com o produto Office completo instalado.
O componente destina-se ao uso como um suplemento ou um snap-in, por exemplo, um suplemento do Office ou um controle em um navegador da Web. Tais componentes normalmente exigem algum tipo de esquema de registro definido pelo ambiente de hospedagem que está além do escopo do manifesto em si.
O componente gerencia um dispositivo físico ou virtual para o sistema, por exemplo, um driver de dispositivo para um spooler de impressão.
O componente é um acesso a dados redistribuível. Os aplicativos de dados geralmente exigem que um redistribuível de Acesso a Dados separado seja instalado antes de poderem ser executados. Você não deve tentar isolar componentes como o Microsoft ADO Data Control, Microsoft OLE DB ou Microsoft Data Access Components (MDAC). Em vez disso, se seu aplicativo usa MDAC ou SQL Server Express, você deve defini-los como pré-requisitos; consulte Como: Instalar pré-requisitos com um aplicativo ClickOnce.
Em alguns casos, pode ser possível para o desenvolvedor do componente redesenhá-lo para COM sem registro. Se isso não for possível, você ainda pode criar e publicar aplicativos que dependem deles através do esquema de registro padrão usando o Bootstrapper. Para obter mais informações, consulte Criação de Pacotes de Bootstrapper.
Um componente COM só pode ser isolado uma vez por aplicativo. Por exemplo, você não pode isolar o mesmo componente COM de dois projetos diferentes de biblioteca de classes que fazem parte do mesmo aplicativo. Isso resultará em um aviso de compilação e o aplicativo falhará ao carregar em tempo de execução. Para evitar esse problema, a Microsoft recomenda que você encapsular componentes COM em uma única biblioteca de classes.
Há vários cenários em que o registro COM é necessário na máquina do desenvolvedor, mesmo que a implantação do aplicativo não exija registro. A
Isolatedpropriedade requer que o componente COM seja registrado na máquina do desenvolvedor para gerar automaticamente o manifesto durante a compilação. Não há recursos de captura de registro que invoquem o autoregistro durante a compilação. Além disso, quaisquer classes não definidas explicitamente na biblioteca de tipos não serão refletidas no manifesto. Ao usar um componente COM com um manifesto pré-existente, como uma referência nativa, o componente pode não precisar ser registrado no momento do desenvolvimento. No entanto, o registro é necessário se o componente for um controle ActiveX e você quiser incluí-lo na Caixa de Ferramentas e no designer do Windows Forms.