Compartilhar via


Escolher uma estratégia de atualização do ClickOnce

O ClickOnce pode fornecer atualizações automáticas do aplicativo. Um aplicativo ClickOnce lê periodicamente seu arquivo de manifesto de implantação para ver se as atualizações para o aplicativo estão disponíveis. Se disponível, a nova versão do aplicativo será baixada e executada. Para obter eficiência, somente os arquivos que foram alterados são baixados.

Ao criar um aplicativo ClickOnce, você precisa determinar qual estratégia o aplicativo usará para verificar se há atualizações disponíveis. Há três estratégias básicas que você pode usar: verificar se há atualizações na inicialização do aplicativo, verificar se há atualizações após a inicialização do aplicativo (em execução em um thread em segundo plano) ou fornecer uma interface do usuário para atualizações.

Além disso, você pode determinar com que frequência o aplicativo verificará se há atualizações e você pode fazer as atualizações necessárias.

Observação

As atualizações de aplicativo exigem conectividade de rede. Se uma conexão de rede não estiver presente, o aplicativo será executado sem verificar se há atualizações, independentemente da estratégia de atualização escolhida.

Observação

No .NET Framework 2.0 e no .NET Framework 3.0, sempre que o aplicativo verificar se há atualizações, antes ou depois da inicialização, ou usando as <APIs xref:System.Deployment.Application> , você deve definir deploymentProvider no manifesto de implantação. O deploymentProvider elemento corresponde no Visual Studio ao campo Local de atualização na caixa de diálogo Atualizações da guia Publicar . Essa regra é relaxada no .NET Framework 3.5. Para obter mais informações, consulte Implantar aplicativos ClickOnce para servidores de teste e produção sem renunciar.

Verificar se há atualizações após a inicialização do aplicativo

Usando essa estratégia, o aplicativo tentará localizar e ler o arquivo de manifesto de implantação em segundo plano enquanto o aplicativo estiver em execução. Se uma atualização estiver disponível, na próxima vez que o usuário executar o aplicativo, ele será solicitado a baixar e instalar a atualização.

Essa estratégia funciona melhor para conexões de rede de baixa largura de banda ou para aplicativos maiores que podem exigir downloads longos.

Para habilitar essa estratégia de atualização, clique em Depois que o aplicativo for iniciado na seção Escolher quando o aplicativo deve verificar se há atualizações da caixa de diálogo Atualizações do Aplicativo . Em seguida, especifique um intervalo de atualização na seção Especificar com que frequência o aplicativo deve verificar se há atualizações.

Isso é o mesmo que alterar o elemento Update no manifesto de implantação da seguinte maneira:

<!-- When to check for updates -->
<subscription>
   <update>
      <expiration maximumAge="6" unit="hours" />
   </update>
</subscription>

Verificar se há atualizações antes da inicialização do aplicativo

A estratégia padrão é tentar localizar e ler o arquivo de manifesto de implantação antes do início do aplicativo. Usando essa estratégia, o aplicativo tentará localizar e ler o arquivo de manifesto de implantação sempre que o usuário iniciar o aplicativo. Se uma atualização não estiver disponível, a versão existente do aplicativo será iniciada. Se uma atualização necessária estiver disponível, ela será baixada e iniciada. Se uma atualização estiver disponível, mas não for necessária, o usuário deverá escolher se deseja atualizar ou iniciar a versão existente.

Essa estratégia funciona melhor para conexões de rede de alta largura de banda; o atraso na inicialização do aplicativo pode ser inaceitávelmente longo em relação a conexões de baixa largura de banda.

Para habilitar essa estratégia de atualização, clique antes de o aplicativo começar na seção Escolher quando o aplicativo deve verificar se há atualizações da caixa de diálogo Atualizações do Aplicativo .

Isso é o mesmo que alterar o elemento Update no manifesto de implantação da seguinte maneira:

<!-- When to check for updates -->
<subscription>
   <update>
      <beforeApplicationStartup />
   </update>
</subscription>

Observação

Para aplicativos .NET Core 3.1 e .NET 5 e mais recentes, verificar as atualizações antes do início do aplicativo é a única opção de atualização com suporte.

Fazer atualizações necessárias

Pode haver ocasiões em que você deseja exigir que os usuários executem uma versão atualizada do seu aplicativo. Por exemplo, você pode fazer uma alteração em um recurso externo, como um serviço Web que impediria que a versão anterior do aplicativo funcionasse corretamente. Nesse caso, você gostaria de marcar sua atualização conforme necessário e impedir que os usuários executem a versão anterior.

Observação

Embora você possa exigir atualizações usando as outras estratégias de atualização, verificar antes do aplicativo ser iniciado é a única maneira de garantir que uma versão mais antiga não possa ser executada. Quando a atualização obrigatória é detectada na inicialização, o usuário deve aceitar a atualização ou fechar o aplicativo.

Para marcar uma atualização conforme necessário, clique em Especificar uma versão mínima necessária para este aplicativo na caixa de diálogo Atualizações do Aplicativo e especifique a versão de publicação (Major, Minor, Build, Revision), que especifica o menor número de versão do aplicativo que pode ser instalado.

Isso é o mesmo que definir o atributo minimumRequiredVersion do elemento Deployment no manifesto de implantação; por exemplo:

<deployment install="true" minimumRequiredVersion="1.0.0.0">

Especificar intervalos de atualização

Você também pode especificar a frequência com que o aplicativo verifica se há atualizações. Para fazer isso, especifique que o aplicativo verifique se há atualizações após a inicialização, conforme descrito em "Verificando se há atualizações após a inicialização do aplicativo" anteriormente neste tópico.

Para especificar o intervalo de atualização, ajuste as propriedades Definir com que frequência o aplicativo deve verificar atualizações na caixa de diálogo Atualizações do Aplicativo.

Isso é o mesmo que definir os atributos maximumAge e unit do elemento Update no manifesto de implantação.

Por exemplo, talvez você queira verificar cada vez que o aplicativo é executado, ou uma vez por semana ou uma vez por mês. Se uma conexão de rede não estiver presente no momento especificado, a verificação de atualização será executada na próxima vez que o aplicativo for executado.

Observação

No ClickOnce para .NET Core e .NET 5 ou posterior, esse recurso não tem suporte. Para obter mais informações, consulte ClickOnce para .NET.

Fornecer uma interface do usuário para atualizações

Ao usar essa estratégia, o desenvolvedor de aplicativos fornece uma interface do usuário que permite que o usuário escolha quando ou com que frequência o aplicativo verificará se há atualizações. Por exemplo, você pode fornecer um comando "Verificar atualizações agora" ou uma caixa de diálogo "Configurações de Atualização" que tenha opções para intervalos de atualização diferentes. As APIs de implantação do ClickOnce fornecem uma estrutura para programar sua própria interface do usuário de atualização. Para obter mais informações, consulte o System.Deployment.Application namespace.

Observação

A ApplicationDeployment classe e as APIs no System.Deployment.Application namespace não são compatíveis com .NET Core e .NET 5 e versões posteriores. No .NET 7, há suporte para um novo método de acesso às propriedades de implantação do aplicativo. Para obter mais informações, consulte as propriedades de implantação do Access ClickOnce no .NET. O .NET 7 não dá suporte ao equivalente aos métodos ApplicationDeployment.

Se seu aplicativo usar APIs de implantação para controlar sua própria lógica de atualização, você deverá bloquear a verificação de atualização, conforme descrito em "Bloqueando a Verificação de Atualização" na seção a seguir.

Essa estratégia funciona melhor quando você precisa de estratégias de atualização diferentes para usuários diferentes.

Bloquear a verificação de atualização

Também é possível impedir que seu aplicativo verifique se há atualizações. Por exemplo, você pode ter um aplicativo simples que nunca será atualizado, mas deseja aproveitar a facilidade de instalação fornecida pela implantação do ClickOnce.

Você também deve bloquear a verificação de atualização se seu aplicativo usa APIs de implantação para executar suas próprias atualizações; consulte "Fornecer uma interface do usuário para atualizações" anteriormente neste tópico.

Para bloquear a verificação de atualização, desmarque a caixa de seleção "O aplicativo deve verificar se há atualizações" na caixa de diálogo Atualizações do Aplicativo.

Você também pode bloquear a verificação de atualização removendo a <Subscription> marca do manifesto de implantação.

Elevação de permissão e atualizações

Se uma nova versão de um aplicativo ClickOnce exigir um nível de confiança mais alto para ser executado do que a versão anterior, o ClickOnce solicitará ao usuário, perguntando se ele deseja que o aplicativo seja concedido a esse nível mais alto de confiança. Se o usuário se recusar a conceder o nível de confiança mais alto, a atualização não será instalada. O ClickOnce solicitará que o usuário instale o aplicativo novamente quando ele for reiniciado na próxima vez. Se o usuário se recusar a conceder o nível mais alto de confiança neste momento e a atualização não estiver marcada como necessária, a versão antiga do aplicativo será executada. No entanto, se a atualização for necessária, o aplicativo não será executado novamente até que o usuário aceite o nível de confiança mais alto.

Nenhuma solicitação para níveis de confiança ocorrerá se você usar a Implantação de Aplicativo Confiável. Para obter mais informações, consulte a visão geral da implantação de aplicativos confiáveis.