Compartilhar via


Verificar as atualizações de aplicativos programaticamente usando a API de implantação do ClickOnce

O ClickOnce oferece duas maneiras de atualizar um aplicativo depois que ele é implantado. No primeiro método, você pode configurar a implantação do ClickOnce para verificar automaticamente se há atualizações em determinados intervalos. No segundo método, você pode escrever um código que usa a classe ApplicationDeployment para verificar se há atualizações com base em um evento, como uma solicitação do usuário.

Observação

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

Os procedimentos a seguir mostram um código para executar uma atualização programática e também descrevem como configurar a implantação do ClickOnce para possibilitar verificações de atualização programáticas.

Para atualizar um aplicativo do ClickOnce programaticamente, você deve especificar um local para as atualizações. Isso pode ser conhecido como um provedor de implantação. Para obter mais informações sobre como definir essa propriedade, consulte Escolher uma estratégia de atualização do ClickOnce.

Observação

Você também pode usar a técnica descrita abaixo para implantar o aplicativo por meio de um local, mas atualizá-lo de outro. Para obter mais informações, consulte Como especificar um local alternativo para atualizações da implantação.

Para verificar se há atualizações programaticamente

  1. Crie um aplicativo do Windows Forms usando a linha de comando ou suas ferramentas visuais preferidas.

  2. Crie qualquer botão, item de menu ou outro item de interface do usuário que você deseja que os usuários selecionem para verificar se há atualizações. No manipulador de eventos desse item, chame o método a seguir para verificar e instalar atualizações.

    private void InstallUpdateSyncWithInfo()
    {
        UpdateCheckInfo info = null;
    
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
    
            try
            {
                info = ad.CheckForDetailedUpdate();
    
            }
            catch (DeploymentDownloadException dde)
            {
                MessageBox.Show("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message);
                return;
            }
            catch (InvalidDeploymentException ide)
            {
                MessageBox.Show("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message);
                return;
            }
            catch (InvalidOperationException ioe)
            {
                MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message);
                return;
            }
    
            if (info.UpdateAvailable)
            {
                Boolean doUpdate = true;
    
                if (!info.IsUpdateRequired)
                {
                    DialogResult dr = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel);
                    if (!(DialogResult.OK == dr))
                    {
                        doUpdate = false;
                    }
                }
                else
                {
                    // Display a message that the app MUST reboot. Display the minimum required version.
                    MessageBox.Show("This application has detected a mandatory update from your current " + 
                        "version to version " + info.MinimumRequiredVersion.ToString() + 
                        ". The application will now install the update and restart.", 
                        "Update Available", MessageBoxButtons.OK, 
                        MessageBoxIcon.Information);
                }
    
                if (doUpdate)
                {
                    try
                    {
                        ad.Update();
                        MessageBox.Show("The application has been upgraded, and will now restart.");
                        Application.Restart();
                    }
                    catch (DeploymentDownloadException dde)
                    {
                        MessageBox.Show("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde);
                        return;
                    }
                }
            }
        }
    }
    
  3. Compile o aplicativo.

Usar o Mage.exe para implantar um aplicativo que verifica se há atualizações programaticamente

  • Siga as instruções para implantar o aplicativo usando o Mage.exe conforme explicado no Passo a passo: Implantar manualmente um aplicativo do ClickOnce. Ao chamar o Mage.exe para gerar o manifesto de implantação, use a opção de linha de comando providerUrl e especifique a URL em que o ClickOnce deve verificar se há atualizações. Se o aplicativo vai atualizar por meio da http://www.adatum.com/MyApp, por exemplo, a chamada para gerar o manifesto de implantação poderá ter esta aparência:

    mage -New Deployment -ToFile WindowsFormsApp1.application -Name "My App 1.0" -Version 1.0.0.0 -AppManifest 1.0.0.0\MyApp.manifest -providerUrl http://www.adatum.com/MyApp/MyApp.application
    

Usar o MageUI.exe para implantar um aplicativo que verifica se há atualizações programaticamente

  • Siga as instruções para implantar o aplicativo usando o Mage.exe conforme explicado no Passo a passo: Implantar manualmente um aplicativo do ClickOnce. Na guia Opções de Implantação, defina o campo Local Inicial como o manifesto do aplicativo do ClickOnce deve verificar se há atualizações. Na guia Opções de Atualização, desmarque a caixa de seleção Este aplicativo deve verificar se há atualizações.

Segurança do .NET Framework

Seu aplicativo deve ter permissões de confiança total para usar a atualização programática.