Partilhar via


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

ClickOnce pode fornecer atualizações automáticas de aplicativos. 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 é baixada e executada. Para maior eficiência, apenas os arquivos que foram alterados são baixados.

Ao projetar 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 pode fazer atualizações necessárias.

Observação

As atualizações de aplicativos 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 seu 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 . Esta regra é relaxada no .NET Framework 3.5. Para obter mais informações, consulte Implantando 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 está 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 Escolha 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 que o aplicativo seja iniciado. 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 terá a opção de atualizar ou iniciar a versão existente.

Essa estratégia funciona melhor para conexões de rede de alta largura de banda; O atraso no início do aplicativo pode ser inaceitavelmente longo em conexões de baixa largura de banda.

Para habilitar essa estratégia de atualização, clique em Antes de iniciar o aplicativo na seção Escolha 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 .NET Core 3.1 e .NET 5 e aplicativos mais recentes, verificar atualizações antes que o aplicativo seja iniciado é a única opção de atualização suportada.

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 seu aplicativo funcionasse corretamente. Nesse caso, convém marcar sua atualização como necessária 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 de iniciar o aplicativo é a única maneira de garantir que uma versão mais antiga não possa ser executada. Quando a atualização obrigatória é detetada na inicialização, o usuário deve aceitar a atualização ou fechar o aplicativo.

Para marcar uma atualização como necessária, clique em Especificar uma versão mínima necessária para este aplicativo na caixa de diálogo Atualizações de Aplicativo e especifique a versão de publicação (Principal, Secundária, Compilação, Revisão), que especifica o número de versão mais baixo 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 com que frequência 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 atualizações após a inicialização do aplicativo" anteriormente neste tópico.

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

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

Por exemplo, você pode querer 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 horário 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 é suportado. Para obter mais informações, consulte ClickOnce para .NET.

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

Ao usar essa estratégia, o desenvolvedor do aplicativo fornece uma interface do usuário que permite ao usuário escolher 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" com opções para diferentes intervalos de atualização. As APIs de implantação do ClickOnce fornecem uma estrutura para programar sua própria interface de usuário de atualização. Para obter mais informações, consulte o namespace System.Deployment.Application.

Observação

A classe ApplicationDeployment e as APIs no namespace System.Deployment.Application não são suportadas no .NET Core e no .NET 5 e versões posteriores. No .NET 7, um novo método de acessar propriedades de implantação de aplicativo é suportado. Para obter mais informações, consulte Acessar propriedades de implantação do ClickOnce no .NET. O .NET 7 não suporta o equivalente aos métodos ApplicationDeployment.

Se seu aplicativo usa APIs de implantação para controlar sua própria lógica de atualização, você deve bloquear a verificação de atualização conforme descrito em "Bloqueando a verificação de atualizações" na seção a seguir.

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

Bloquear 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ções se seu aplicativo usa APIs de implantação para executar suas próprias atualizações; consulte "Fornecer uma interface de usuário para atualizações" anteriormente neste tópico.

Para bloquear a verificação de atualizações, 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> tag do manifesto de implantação.

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

Se uma nova versão de um aplicativo ClickOnce exigir um nível mais alto de confiança para ser executado do que a versão anterior, o ClickOnce solicitará ao usuário, perguntando se ele deseja que o aplicativo receba 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. ClickOnce solicitará que o usuário instale o aplicativo novamente quando ele for reiniciado em seguida. 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 de níveis de confiança ocorrerá se você usar a Implantação de Aplicativo Confiável. Para obter mais informações, consulte Visão geral da implantação de aplicativos confiáveis.