Compartilhar via


Como: verificar se há atualizações do aplicativo programaticamente usando a API de implantação de ClickOnce

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

Os procedimentos a seguir mostram alguns códigos para executar uma atualização através de programação e também descrevem como configurar a implantação de ClickOnce para ativar as verificações de atualização através de programação.

Para atualizar um aplicativo ClickOnce programaticamente, você deve especificar um local para atualizações.Às vezes, isso é conhecido como um provedor de implantação.Para obter mais informações sobre a definição dessa propriedade, consulte Escolhendo uma estratégia de atualização de ClickOnce.

ObservaçãoObservação

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

Para verificar atualizações programaticamente

  1. Crie um novo aplicativo do Windows Forms usando suas ferramentas de linha de comando ou visual preferenciais.

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

    Private Sub InstallUpdateSyncWithInfo()
        Dim info As UpdateCheckInfo = Nothing
    
        If (ApplicationDeployment.IsNetworkDeployed) Then
            Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    
            Try
                info = AD.CheckForDetailedUpdate()
            Catch dde As DeploymentDownloadException
                MessageBox.Show("The new version of the application cannot be downloaded at this time. " + ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later. Error: " + dde.Message)
                Return
            Catch ioe As InvalidOperationException
                MessageBox.Show("This application cannot be updated. It is likely not a ClickOnce application. Error: " & ioe.Message)
                Return
            End Try
    
            If (info.UpdateAvailable) Then
                Dim doUpdate As Boolean = True
    
                If (Not info.IsUpdateRequired) Then
                    Dim dr As DialogResult = MessageBox.Show("An update is available. Would you like to update the application now?", "Update Available", MessageBoxButtons.OKCancel)
                    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
                        doUpdate = False
                    End If
                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)
                End If
    
                If (doUpdate) Then
                    Try
                        AD.Update()
                        MessageBox.Show("The application has been upgraded, and will now restart.")
                        Application.Restart()
                    Catch dde As DeploymentDownloadException
                        MessageBox.Show("Cannot install the latest version of the application. " & ControlChars.Lf & ControlChars.Lf & "Please check your network connection, or try again later.")
                        Return
                    End Try
                End If
            End If
            End If
    End Sub
    
    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;
                    }
                }
            }
        }
    }
    
    public:
        void InstallUpdateSync()
        {
            if (ApplicationDeployment::IsNetworkDeployed)
            {
                bool isUpdateAvailable = false;
                ApplicationDeployment^ appDeployment =
                    ApplicationDeployment::CurrentDeployment;
    
                try
                {
                    isUpdateAvailable = appDeployment->CheckForUpdate();
                }
                catch (InvalidOperationException^ ex)
                {
                    MessageBox::Show("The update check failed. Error: {0}",
                        ex->Message);
                    return;
                }
    
                if (isUpdateAvailable)
                {
                    try
                    {
                        appDeployment->Update();
                        MessageBox::Show(
                            "The application has been upgraded, and will now " +
                            "restart.");
                        Application::Restart();
                    }
                    catch (Exception^ ex)
                    {
                        MessageBox::Show("The update failed. Error: {0}",
                            ex->Message);
                        return;
                    }
    
                }
            }
        }
    
  3. Compile seu aplicativo.

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

  • Siga as instruções para implantar seu aplicativo usando o Mage conforme explicado na Passo a passo: Manualmente implantando um aplicativo de ClickOnce.Ao chamar Mage para gerar o manifesto de implantação, certifique-se de usar a opção de linha de comando providerUrle para especificar a URL onde ClickOnce deve verificar as atualizações.Se seu aplicativo irá atualizar a partir de http://www.adatum.com/MyApp, por exemplo, a sua chamada para gerar o manifesto de implantação pode parecer com isso:

    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
    

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

  • Siga as instruções para implantar seu aplicativo usando o Mage conforme explicado na Passo a passo: Manualmente implantando um aplicativo de ClickOnce.No Opções de implantação guia, defina a Local iniciar campo ao manifesto do aplicativo ClickOnce deve verificar as atualizações.Sobre o Opções de atualização guia, limpar o Este aplicativo deve verificar as atualizações caixa de seleção.

Segurança

Seu aplicativo deve ter permissões de confiança total para usar a atualização através de programação.

Consulte também

Tarefas

Como: especificar um local alternativo para implantação de atualizações

Conceitos

Escolhendo uma estratégia de atualização de ClickOnce

Publicando aplicativos de ClickOnce