Compartilhar via


Implantar componentes do COM ClickOnce

Implantação de componentes do legado COM tradicionalmente tem sido uma tarefa difícil. Componentes precisam ser registrados globalmente e, portanto, podem causar os efeitos colaterais indesejáveis entre aplicativos sobrepostos. Essa situação geralmente não é um problema no.NET Framework, pois são completamente isolados em um aplicativo de componentes ou são compatíveis com o lado a lado. Visual Studio permite que você implante componentes isolados do COM no Windows XP ou superior do sistema.

ClickOnceFornece um mecanismo fácil e seguro para a implantação de seu.NET applications. No entanto, se os aplicativos usam componentes legados do COM, você precisará executar etapas adicionais para implantá-los. Este tópico descreve como implantar os componentes isolados do COM e fazer referência a componentes nativos (por exemplo, de Visual Basic 6.0 ou Visual C++).

Para obter mais informações sobre a implantação de componentes isolados do COM, consulte "Simplifique a implantação de aplicativos com ClickOnce e COM sem registro" em https://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/default.aspx.

COM sem registro

COM sem registro é uma nova tecnologia de implantação e ativação componentes isolados do COM. Ele funciona colocando biblioteca da todos os componentes de tipos e as informações de registro é normalmente instaladas no registro do sistema em um arquivo XML chamado um manifesto, armazenados na mesma pasta do aplicativo.

Um componente COM o isolamento requer que ele seja registrado na máquina do desenvolvedor, mas ele não precisa ser registrado no computador do usuário final. Para isolar um componente COM, tudo o que você precisa fazer é definir sua referência isolada propriedade para True. Por padrão, essa propriedade é definida como False, indicando que ele deve ser tratado como uma referência de COM registrados. Se essa propriedade for True, faz com que um manifesto a ser gerado para este componente em tempo de compilação. Ele também faz com que os arquivos correspondentes a serem copiados para a pasta do aplicativo durante a instalação.

Quando o gerador de manifesto encontra uma referência isolada do COM, ele enumera todos os CoClass entradas na biblioteca de tipos do componente, a correspondência de cada entrada com seus dados de registro correspondente e a geração de manifestam de definições de todas as classes COM do arquivo de biblioteca de tipo.

Implantando componentes COM sem registro, usando ClickOnce

ClickOncetecnologia de implantação é adequada para a implantação de componentes COM isolado, pois ambos ClickOnce e COM sem registro exigem que um componente tem um manifesto para ser implantado.

Normalmente, o autor do componente deve fornecer um manifesto. Caso contrário, no entanto, o Visual Studio é capaz de gerar um manifesto automaticamente para um componente COM. A geração de manifesto é realizada durante a ClickOnce o processo de publicação; Para obter mais informações, consulte Publishing ClickOnce Applications. Esse recurso também permite que você aproveite os componentes legados que você criou em ambientes de desenvolvimento anteriores como, por exemplo, Visual Basic 6.0.

Há duas maneiras que ClickOnce implanta os componentes COM:

  • Usar o bootstrapper para implantar os componentes COM. Isso funciona em todas as plataformas suportadas.

  • Use a implantação de isolamento (também conhecido como COM sem registro) do componente nativo. No entanto, isso só funcionará em um sistema de operacional superior ou o Windows XP.

Exemplo de isolar e implantando um componente simples

Para demonstrar a implantação de componente COM sem registro, este exemplo cria um aplicativo baseado no Windows em 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 nativo COM:

Para criar um componente nativo

  1. Usando Visual Basic 6.0, a partir de arquivo menu, clique em nova, em seguida, projeto.

  2. No Novo projeto caixa de diálogo, selecione o Visual Basic nó e selecione um activex dll project. No nome , digite VB6Hello.

    ObservaçãoObservação

    Somente tipos de projeto DLL de ActiveX e ActiveX de controle são compatíveis com o COM sem registro; Não há suporte para tipos de projeto EXE de ActiveX e ActiveX de documento.

  3. Em Solution Explorer, clique duas vezes em Class1. vb para abrir o editor de texto.

  4. No Class1. vb, adicione o seguinte código após o código gerado para o New método:

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Crie o componente. Do Build menu, clique em Build Solution.

ObservaçãoObservação

COM sem registro suporta somente as DLLs e COM controla os tipos de projeto. Não é possível usar EXEs com sem registro COM.

Agora você pode criar um aplicativo baseado no Windows e adicionar uma referência ao componente COM.

Para criar um aplicativo baseado no Windows, usando um componente COM

  1. Usando Visual Basic, a partir de arquivo menu, clique em novo, em seguida, projeto.

  2. No Novo projeto caixa de diálogo, selecione o Visual Basic nó e selecione Windows Application. No nome , digite RegFreeComDemo.

  3. Em Solution Explorer, clique o Mostrar todos os arquivos o botão para exibir as referências do projeto.

  4. Com o botão direito do referências nó e selecione Adicionar referência de no menu de contexto.

  5. No Add Reference caixa de diálogo, clique no Procurar guia, navegue até VB6Hello.dll e selecioná-lo.

    A VB6Hello referência aparecerá na lista de referências.

  6. Aponte para o caixa de ferramentas, selecione um botão controle e arraste-o para o Form1 formulário.

  7. No Propriedades janela, defina o botão texto propriedade para Hello.

  8. Clique duas vezes no botão para adicionar o código de manipulador e no arquivo de código, adicione código para que o manipulador lê como segue:

    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. Execute o aplicativo. Do Debug menu, clique em Start Debugging.

Em seguida, você precisará isolar o controle. Cada componente COM que o aplicativo usa é representado no seu projeto como uma referência de COM. Essas referências são visíveis a referências nó a Solution Explorer janela. (Observe que você pode adicionar referências diretamente através da Add Reference comando sobre o projeto menu, ou indiretamente por arrastar um controle ActiveX para seu 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

  1. Em Solution Explorer, o referências nó, selecione o VB6Hello referência.

  2. No Propriedades janela, altere o valor da isolada propriedade de False para True.

  3. Do Build menu, clique em Build Solution.

Agora, quando você pressionar F5, o aplicativo funcione conforme o esperado, mas agora está executando sob sem registro COM. Para provar isso, tente cancelar o registro do componente de VB6Hello.dll e RegFreeComDemo1.exe fora do IDE Visual Studio de execução. Desta vez, quando o botão for clicado, ele ainda funciona. Se você renomear temporariamente o manifesto do aplicativo, ele novamente falhará.

ObservaçãoObservação

Você pode simular a ausência de um componente COM, removendo-o temporariamente. Abra um prompt de comando, vá para a pasta do sistema digitando %windir%\system32 do cd /d, cancele o 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 isolado

  1. Do Build menu, clique em Publicar RegFreeComDemo.

    O Assistente de Publicação aparece.

  2. No Publish Wizard, especifique um local no disco do computador local, onde você pode acessar e examinar os arquivos publicados.

  3. Clique em Concluir para publicar o aplicativo.

Se você examinar os arquivos publicados, você notará que o arquivo de Sysmon 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, não pode interferir com este aplicativo.

Referenciando Assemblies nativos

Visual Studio oferece suporte a referências a 6.0 nativo de Visual Basic ou assemblies de C++; Essas referências são chamadas de referências nativas. Você pode dizer se uma referência é nativa, confirmando que sua O tipo de arquivo for definida como nativo ou ActiveX.

Para adicionar uma referência nativa, use o Adicionar referência de de comando e navegue para o manifesto. Alguns componentes coloque o manifesto dentro da DLL. Nesse caso, você pode simplesmente escolher da própria DLL e Visual Studio irá adicioná-la como uma referência nativa se detectar que o componente contém um manifesto incorporado. Visual Studio incluirá também automaticamente os arquivos dependentes ou assemblies listados no manifesto, se eles estiverem na mesma pasta que o componente referenciado.

Isolamento de controle COM torna fácil de implantar os componentes COM que ainda não tenham manifestos. No entanto, se um componente é fornecido com um manifesto, você pode referenciar diretamente o manifesto. Na verdade, você deve sempre usar o manifesto fornecido pelo autor do componente, sempre que possível, em vez de usar o isolada propriedade.

Limitações de implantação do componente COM sem registro

COM sem registro fornece vantagens evidentes em técnicas de implantação tradicional. No entanto, existem algumas limitações e advertências também devem ser apontadas. A maior limitação é que ele só funciona no Windows XP ou superior. A implementação de COM sem registro necessárias alterações para a maneira na qual os componentes são carregados no núcleo do sistema operacional. Infelizmente, não há nenhuma camada de suporte de nível inferior para liberar o registro COM.

Não, cada componente é um candidato adequado sem registro COM. Um componente não é um adequado se qualquer uma das seguintes condições forem verdadeiras:

  • O componente é um servidor fora do processo. Não há suporte para servidores EXE; somente as DLLs são suportadas.

  • O componente é parte do sistema operacional ou é um componente do sistema, como, por exemplo, XML, o Internet Explorer ou o Microsoft Data Access Components (MDAC). Você deve seguir a política de redistribuição do autor do componente; Verifique com seu fornecedor.

  • O componente é parte de um aplicativo, como, por exemplo, Microsoft Office. Por exemplo, você não deve tentar isolar o modelo de objeto do Microsoft Excel. Isso é parte do Office e só pode ser usado em um computador com o produto completo do Office instalado.

  • O componente se destina a uso como um suplemento ou um snap-in, por exemplo, um suplemento do Office ou um controle em um navegador da Web. Tais componentes geralmente requerem algum tipo de esquema de registro definido pelo ambiente de hospedagem está além do escopo do próprio manifesto.

  • 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 é redistribuível de acesso a dados. Aplicativos de dados geralmente exigem um separado acesso a dados redistribuível para ser instalado antes de serem executados. Você não deve tentar isolar os componentes como, por exemplo, o controle de dados do Microsoft ADO, o Microsoft OLE DB ou o Microsoft Data Access Components (MDAC). Em vez disso, se seu aplicativo usa o MDAC ou de SQL Server Express, você deve defini-los como pré-requisitos; see How to: Instalar pré-requisitos com um aplicativo de ClickOnce.

Em alguns casos, talvez seja possível para o desenvolvedor do componente reprojetar o para liberar o registro COM. Se não for possível, você pode criar e publicar aplicativos que dependem deles por meio 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, é possível isolar o mesmo componente COM de dois diferentes Biblioteca de classe os projetos que fazem parte do mesmo aplicativo. Isso resultará em um aviso de compilação e o aplicativo não será carregado em tempo de execução. Para evitar esse problema, a Microsoft recomenda que você encapsula os componentes COM em uma biblioteca de classe única.

Há vários cenários em que COM o registro é obrigatório na máquina do desenvolvedor, embora a implantação do aplicativo não requer registro. O Isolated propriedade requer que o componente COM ser registrado na máquina do desenvolvedor para gerar automaticamente o manifesto durante a compilação. Não há não há recursos de captura de registro que chamam o auto-registro durante a compilação. Além disso, as classes não explicitamente definidas na biblioteca de tipos não serão refletidas no manifesto. Ao usar um componente COM um manifesto pré-existentes, como, por exemplo, uma referência nativa, o componente talvez não precise ser registrada no tempo de desenvolvimento. No entanto, o registro é obrigatório se o componente é um controle de ActiveX e você deseja incluir na caixa de ferramentas e o Windows Forms designer.

Consulte também

Conceitos

ClickOnce Segurança e implantação