Problemas de segurança, controle de versão e manifesto em implantações do ClickOnce

Existe uma variedade de problemas de segurança, controle de versão do aplicativo, sintaxe de manifesto e semântica do ClickOnce que podem fazer com que uma implantação do ClickOnce não tenha êxito.

Controle de Conta de Usuário do Windows e ClickOnce

No Windows Vista e em versões mais recentes do Windows, os aplicativos, por padrão, são executados como um usuário padrão, mesmo que o usuário atual esteja conectado com uma conta que tenha permissões de administrador. Se um aplicativo precisar executar uma ação que exija permissões de administrador, ele informará ao sistema operacional, o que solicitará que o usuário insira suas credenciais de administrador. Esse recurso, chamado UAC (Controle de Conta de Usuário), impede que os aplicativos façam alterações que possam afetar todo o sistema operacional sem a aprovação explícita de um usuário. Os aplicativos do Windows declaram que exigem essa elevação de permissão especificando o atributo requestedExecutionLevel na seção trustInfo do manifesto do aplicativo.

Devido ao risco de expor aplicativos a ataques de elevação de segurança, os aplicativos do ClickOnce não podem solicitar elevação de permissão se o UAC estiver habilitado no cliente. Qualquer aplicativo ClickOnce que tente definir seu atributo requestedExecutionLevel como requireAdministrator ou highestAvailable não será instalado no Windows Vista e em versões mais recentes.

Em alguns casos, seu aplicativo ClickOnce pode tentar executar com permissões de administrador devido à lógica de detecção do instalador no Windows Vista. Nesse caso, você pode definir o atributo requestedExecutionLevel no manifesto do aplicativo como asInvoker. Isso fará com que o próprio aplicativo seja executado sem elevação. O Visual Studio adiciona automaticamente esse atributo a todos os manifestos do aplicativo.

Se você estiver desenvolvendo um aplicativo que requer permissões de administrador durante a vida útil do aplicativo, considere implantar o aplicativo usando a tecnologia MSI (Windows Installer). Para obter mais informações, confira Noções básicas do Windows Installer.

Cotas de aplicativos online e aplicativos de confiança parcial

Se o aplicativo ClickOnce for executado online em vez de por meio de uma instalação, ele deverá se ajustar à cota reservada para aplicativos online. Além disso, um aplicativo de rede executado em confiança parcial, como com um conjunto restrito de permissões de segurança, não pode ser maior que metade do tamanho da cota.

Para obter mais informações e instruções sobre como alterar a cota de aplicativos online, confira Visão geral do cache do ClickOnce.

Problemas de controle de versão

Você poderá ter problemas se atribuir nomes fortes ao assembly e incrementar o número de versão do assembly para refletir uma atualização do aplicativo. Qualquer assembly compilado com uma referência a um assembly de nome forte deve ser recompilado ou o assembly tentará fazer referência à versão mais antiga. O assembly tentará isso porque ele está usando o valor da versão antiga em sua solicitação de associação.

Por exemplo, digamos que você tenha um assembly de nome forte no seu próprio projeto com a versão 1.0.0.0. Depois de compilar o assembly, adicione-o como uma referência ao projeto que contém seu aplicativo principal. Se você atualizar o assembly, incrementar a versão para 1.0.0.1 e tentar implantá-lo sem também recompilar o aplicativo, o aplicativo não poderá carregar o assembly no tempo de execução.

Esse erro só ocorre se você editar os manifestos do ClickOnce manualmente; você não deve enfrentar esse erro se gerar sua implantação usando o Visual Studio.

Especificar assemblies de .NET Framework individuais no manifesto

Seu aplicativo falhará ao carregar se você editou manualmente uma implantação do ClickOnce para fazer referência a uma versão mais antiga de um assembly de .NET Framework. Por exemplo, se você adicionou uma referência ao assembly System.Net para uma versão do .NET Framework antes da versão especificada no manifesto, ocorrerá um erro. Em geral, você não deve tentar especificar referências a assemblies de .NET Framework individuais, pois a versão do .NET Framework na qual o aplicativo é executado é especificada como uma dependência no manifesto do aplicativo.

Problemas de análise de manifesto

Os arquivos de manifesto usados pelo ClickOnce são arquivos XML e devem ser bem formados e válidos: eles devem obedecer às regras de sintaxe XML e usar apenas elementos e atributos definidos no esquema XML relevante.

Algo que pode causar problemas em um arquivo de manifesto é selecionar um nome para seu aplicativo que contém um caractere especial, como uma aspa única ou dupla. O nome do aplicativo faz parte da identidade do ClickOnce. No momento, o ClickOnce não analisa identidades que contêm caracteres especiais. Se o aplicativo não for ativado, verifique se você está usando apenas caracteres alfabéticos e numéricos para o nome e tente implantá-lo novamente.

Se você editou manualmente os manifestos de implantação ou do aplicativo, talvez os tenha corrompido involuntariamente. O manifesto corrompido impedirá a instalação correta do ClickOnce. Você pode depurar esses erros em tempo de execução clicando em Detalhes na caixa de diálogo Erro do ClickOnce e lendo a mensagem de erro no log. O log listará uma das seguintes mensagens:

  • A descrição do erro de sintaxe e o número da linha e a posição do caractere em que ocorreu o erro.

  • O nome do elemento ou atributo usado em violação do esquema do manifesto. Se você adicionou XML manualmente aos manifestos, precisará comparar suas adições com os esquemas de manifesto. Para obter mais informações, confira Manifesto de implantação do ClickOnce e Manifesto do aplicativo do ClickOnce.

  • Um conflito de ID. As referências de dependência em manifestos de implantação e do aplicativo devem ser exclusivas nos atributos name e publicKeyToken. Se ambos os atributos corresponderem entre dois elementos dentro do manifesto, a análise de manifesto não terá êxito.

Precauções ao alterar manualmente manifestos ou aplicativos

Ao atualizar um manifesto do aplicativo, você deve assinar novamente o manifesto do aplicativo e o manifesto de implantação. O manifesto de implantação contém uma referência ao manifesto do aplicativo que inclui o hash desse arquivo e sua assinatura digital.

Precauções com o uso do provedor de implantação

O manifesto de implantação do ClickOnce tem uma propriedade deploymentProvider que aponta para o caminho completo do local de onde o aplicativo deve ser instalado e atendido:

<deploymentProvider codebase="http://myserver/myapp.application" />

Esse caminho é definido quando o ClickOnce cria o aplicativo e é obrigatório para os aplicativos instalados. O caminho aponta para o local padrão em que o instalador do ClickOnce instalará o aplicativo e procurará pelas atualizações. Se você usar o comando xcopy para copiar um aplicativo do ClickOnce para uma localização diferente, mas não alterar a propriedade deploymentProvider, o ClickOnce ainda fará referência ao local original ao tentar fazer download do aplicativo.

Se você quiser mover ou copiar um aplicativo, também deverá atualizar o caminho deploymentProvider para que o cliente realmente seja instalado do novo local. Atualizar esse caminho é a principal preocupação se você instalou os aplicativos. Para aplicativos online que são sempre iniciados por meio da URL original, definir o deploymentProvider é opcional. Se deploymentProvider estiver definido, ele será honrado; caso contrário, a URL usada para iniciar o aplicativo será usada como a URL base para baixar arquivos de aplicativo.

Observação

Sempre que atualizar o manifesto, você também deverá assiná-lo novamente.

Solucionar problemas de implantações do ClickOnceAplicativos ClickOnce segurosEscolha uma estratégia de implantação do ClickOnce