Compartilhar via


Criar aplicativos ClickOnce para que outros usuários implantem

Nem todos os desenvolvedores que estão criando implantações do ClickOnce pretendem implantar os próprios aplicativos. Muitos deles apenas empacotam o aplicativo usando o ClickOnce e, em seguida, entregam os arquivos a um cliente, como uma grande empresa. O cliente se torna o responsável por hospedar o aplicativo na própria rede. Este tópico discute alguns dos problemas inerentes a essas implantações em versões do .NET Framework anteriores à versão 3.5. Em seguida, descreve uma nova solução fornecida usando o novo recurso "usar manifesto para confiança" no .NET Framework 3.5. Por fim, ele conclui com estratégias recomendadas para criar implantações do ClickOnce para clientes que ainda estão usando versões mais antigas do .NET Framework.

Problemas envolvidos na criação de implantações para clientes

Vários problemas ocorrem quando você planeja fornecer uma implantação a um cliente. O primeiro problema diz respeito à assinatura de código. Para ser implantado em uma rede, o manifesto de implantação e o manifesto do aplicativo de uma implantação do ClickOnce devem ser assinados com um certificado digital. Isso levanta a questão de usar o certificado do desenvolvedor ou o certificado do cliente ao assinar os manifestos.

A questão de qual certificado usar é crítica, pois a identidade de um aplicativo ClickOnce tem base na assinatura digital do manifesto de implantação. Se o desenvolvedor assinar o manifesto de implantação, poderá causar a conflitos se o cliente for uma grande empresa e mais de uma divisão da empresa implantar uma versão personalizada do aplicativo.

Por exemplo, digamos que a Adventure Works tenha um departamento financeiro e um departamento de recursos humanos. Os dois departamentos licenciam um aplicativo ClickOnce da Microsoft Corporation que gera relatórios de dados armazenados em um banco de dados SQL. A Microsoft fornece a cada departamento uma versão do aplicativo personalizada para seus dados. Se os aplicativos forem assinados com o mesmo certificado Authenticode, um usuário que tentar usar os dois aplicativos encontrará um erro, pois o ClickOnce consideraria o segundo aplicativo idêntico ao primeiro. Nesse caso, o cliente poderia experimentar efeitos colaterais imprevisíveis e indesejados que incluem a perda de todos os dados armazenados localmente pelo aplicativo.

Um problema adicional relacionado à assinatura de código é o elemento deploymentProvider no manifesto de implantação, que informa ao ClickOnce onde procurar atualizações de aplicativo. Esse elemento deve ser adicionado ao manifesto de implantação antes da assinatura. Se esse elemento for adicionado posteriormente, o manifesto de implantação deverá ser assinado novamente.

Exigir que o cliente assine o manifesto de implantação

Uma solução para esse problema de implantações não exclusivas é fazer com que o desenvolvedor assine o manifesto do aplicativo e o cliente assine o manifesto de implantação. Embora essa abordagem funcione, ela apresenta outros problemas. Como um certificado Authenticode deve permanecer um ativo protegido, o cliente não pode simplesmente fornecer o certificado ao desenvolvedor para assinar a implantação. Embora o próprio cliente possa assinar o manifesto de implantação usando ferramentas disponíveis gratuitamente com o SDK do .NET Framework, isso pode exigir mais conhecimento técnico do que o cliente está disposto ou é capaz de fornecer. Nesses casos, o desenvolvedor geralmente cria um aplicativo, site ou outro mecanismo por meio do qual o cliente possa enviar sua versão do aplicativo para assinatura.

O impacto da assinatura do cliente na segurança do aplicativo ClickOnce

Mesmo que o desenvolvedor e o cliente concordem que o cliente deve assinar o manifesto do aplicativo, isso gera outros problemas que envolvem a identidade do aplicativo, especialmente quando ele se aplica à implantação de aplicativos confiáveis. (Para saber mais sobre esse recurso, confira Visão geral da implantação de aplicativos confiáveis.) Digamos que a Adventure Works queira configurar seus computadores cliente para que qualquer aplicativo fornecido a eles pela Microsoft Corporation seja executado com confiança total. Se a Adventure Works assinar o manifesto de implantação, o ClickOnce usará a assinatura de segurança da Adventure Work para determinar o nível de confiança do aplicativo.

Criar implantações de cliente usando o manifesto do aplicativo para confiança

O ClickOnce no .NET Framework 3.5 contém um novo recurso que fornece aos desenvolvedores e clientes uma nova solução para o cenário de como os manifestos devem ser assinados. O manifesto do aplicativo ClickOnce dá suporte a um novo elemento chamado <useManifestForTrust> que permite que um desenvolvedor expresse que a assinatura digital do manifesto do aplicativo é o que deve ser usada para tomar decisões de confiança. O desenvolvedor usa ferramentas de empacotamento do ClickOnce, como Mage.exe, MageUI.exe e Visual Studio, para incluir esse elemento no manifesto do aplicativo, bem como para inserir o nome do Editor e o nome do aplicativo no manifesto.

Ao usar <useManifestForTrust>, o manifesto de implantação não precisa ser assinado com um certificado Authenticode emitido por uma autoridade de certificação. Em vez disso, ele pode ser assinado com o que é conhecido como um certificado autoassinado. Um certificado autoassinado é gerado pelo cliente ou pelo desenvolvedor usando ferramentas padrão do SDK do .NET Framework e, em seguida, aplicado ao manifesto de implantação usando as ferramentas de implantação padrão do ClickOnce. Para saber mais, confira MakeCert.

O uso de um certificado autoassinado para o manifesto de implantação apresenta várias vantagens. Ao eliminar a necessidade de o cliente obter ou criar seu próprio certificado Authenticode, <useManifestForTrust> simplifica a implantação para o cliente, permitindo ao desenvolvedor manter sua própria identidade visual no aplicativo. O resultado é um conjunto de implantações assinadas que são mais seguras e têm identidades de aplicativo exclusivas. Isso elimina o possível conflito que pode ocorrer com a implantação do mesmo aplicativo em vários clientes.

Para obter informações passo a passo sobre como criar uma implantação do ClickOnce com <useManifestForTrust> habilitado, confira Passo a passo: implantar manualmente um aplicativo ClickOnce que não exige recontratação e que preserva informações de identidade visual.

Como o manifesto do aplicativo para obtenção de confiança funciona em tempo de execução

Para entender melhor como o uso do manifesto do aplicativo para obtenção confiança funciona em tempo de execução, considere o exemplo a seguir. Um aplicativo ClickOnce direcionado ao .NET Framework 3.5 é criado pela Microsoft. O manifesto do aplicativo usa o elemento <useManifestForTrust> e é assinado pela Microsoft. A Adventure Works assina o manifesto de implantação usando um certificado autoassinado. Os clientes da Adventure Works são configurados para confiar em qualquer aplicativo assinado pela Microsoft.

Quando um usuário clica em um link para o manifesto de implantação, o ClickOnce instala o aplicativo no computador do usuário. As informações de certificado e de implantação identificam o aplicativo exclusivamente para o ClickOnce no computador cliente. Se o usuário tentar instalar o mesmo aplicativo novamente de um local diferente, o ClickOnce poderá usar essa identidade para determinar se o aplicativo já existe no cliente.

Em seguida, o ClickOnce examina o certificado Authenticode usado para assinar o manifesto do aplicativo, que determina o nível de confiança que o ClickOnce concederá. Como a Adventure Works configurou seus clientes para confiar em qualquer aplicativo assinado pela Microsoft, esse aplicativo ClickOnce recebe confiança total. Para saber mais, confira Visão geral da implantação de aplicativos confiáveis.

Criar implantações de clientes para versões anteriores

E se um desenvolvedor estiver implantando aplicativos ClickOnce para clientes que estão usando versões mais antigas de .NET Framework? As seções a seguir resumem várias soluções recomendadas, juntamente com os benefícios e desvantagens de cada uma.

Assinar implantações em nome do cliente

Uma estratégia de implantação possível é que o desenvolvedor crie um mecanismo para assinar implantações em nome de seus clientes, usando a própria chave privada do cliente. Isso impede que o desenvolvedor tenha que gerenciar chaves privadas ou vários pacotes de implantação. O desenvolvedor só fornece a mesma implantação para cada cliente. Cabe ao cliente personalizá-la para seu ambiente usando o serviço de assinatura.

Uma desvantagem desse método é o tempo e a despesa necessários para implementá-lo. Embora esse serviço possa ser compilado usando as ferramentas fornecidas no SDK do .NET Framework, ele adicionará mais tempo de desenvolvimento ao ciclo de vida do produto.

Conforme observado anteriormente neste tópico, outra desvantagem é que a versão do aplicativo de cada cliente terá a mesma identidade do aplicativo, o que pode gerar conflitos. Se isso for uma preocupação, o desenvolvedor poderá alterar o campo Nome usado ao gerar o manifesto de implantação para dar um nome exclusivo a cada aplicativo. Isso criará uma identidade separada para cada versão do aplicativo e eliminará possíveis conflitos de identidade. Esse campo corresponde ao argumento -Name para Mage.exe e ao campo Nome na guia Nome em MageUI.exe.

Por exemplo, digamos que o desenvolvedor tenha criado um aplicativo chamado Application1. Em vez de criar uma única implantação com o campo Nome definido como Application1, o desenvolvedor pode criar várias implantações com uma variação desse nome específica ao cliente, por exemplo, Application1-CustomerA, Application1-CustomerB e assim por diante.

Implantar usando um pacote de instalação

Uma segunda estratégia de implantação possível é gerar um projeto de Instalação da Microsoft para executar a implantação inicial do aplicativo ClickOnce. Isso pode ser fornecido em um dentre vários formatos diferentes: como uma implantação MSI, como um arquivo executável de instalação (.EXE) ou como um arquivo de gabinete (.cab) junto com um script em lote.

Usando essa técnica, o desenvolvedor forneceria ao cliente uma implantação que inclui os arquivos de aplicativo, o manifesto do aplicativo e um manifesto de implantação que serve como modelo. O cliente executaria o programa de instalação, o que geraria a solicitação de uma URL de implantação (o local do servidor ou do compartilhamento de arquivos do qual os usuários instalarão o aplicativo ClickOnce), bem como um certificado digital. O aplicativo de instalação também pode optar por solicitar opções adicionais de configuração do ClickOnce, como o intervalo de verificação de atualização. Após a coleta dessas informações, o programa de instalação gerará o manifesto de implantação real, assinará e publicará o aplicativo ClickOnce no local do servidor designado.

Há três maneiras pelas quais o cliente pode assinar o manifesto de implantação nessa situação:

  1. O cliente pode usar um certificado válido emitido por uma AC (autoridade de certificação).

  2. Como uma variação dessa abordagem, o cliente pode optar por assinar o manifesto de implantação com um certificado autoassinado. A desvantagem disso é que ele fará com que o aplicativo exiba as palavras "Editor Desconhecido" quando o usuário receber a solicitação de instalação. No entanto, a vantagem é que isso impede que clientes menores tenham que gastar tempo e dinheiro com um certificado emitido por uma autoridade de certificação.

  3. Por fim, o desenvolvedor pode incluir seu próprio certificado autoassinado no pacote de instalação. Isso gera os possíveis problemas com a identidade do aplicativo discutidos anteriormente neste tópico.

    A desvantagem do método do projeto de implantação de instalação é o tempo e as despesas necessários para criar um aplicativo de implantação personalizado.

Fazer com que o cliente gere o manifesto de implantação

Uma terceira estratégia de implantação possível é entregar apenas os arquivos de aplicativo e o manifesto do aplicativo para o cliente. Nesse cenário, o cliente é responsável por usar o SDK do .NET Framework para gerar e assinar o manifesto de implantação.

A desvantagem desse método é que ele exige que o cliente instale as ferramentas do SDK do .NET Framework e que tenha um desenvolvedor ou administrador de sistema qualificado para usá-las. Alguns clientes podem demandar uma solução que exija pouco ou nenhum esforço técnico de sua parte.