Como: Buscar actualizaciones de aplicaciones mediante programación utilizando la API de implementación de ClickOnce

Actualización: noviembre 2007

ClickOnce proporciona dos maneras de actualizar una aplicación una vez implementada. En el primer método, puede configurar la implementación ClickOnce para comprobar automáticamente las actualizaciones en ciertos intervalos. En el segundo método, puede escribir código que utiliza la clase ApplicationDeployment para comprobar las actualizaciones basadas en un evento, como una solicitud del usuario.

Los procedimientos siguientes muestran código para realizar una actualización de programación y describen cómo configurar una implementación ClickOnce para habilitar las comprobaciones de actualización de programación.

Para actualizar una aplicación ClickOnce mediante programación, debe especificar la ubicación de las actualizaciones. A veces, esto se denomina proveedor de implementación. Para obtener más información sobre cómo establecer esta propiedad, vea Elegir una estrategia de actualización de ClickOnce.

Nota:

También puede utilizar la técnica descrita a continuación para implementar su aplicación desde una ubicación y actualizarla desde otra. Para obtener más información, vea Cómo: Especificar una ubicación alternativa para las actualizaciones de la implementación.

Para comprobar las actualizaciones mediante programación

  1. Cree una nueva aplicación de formularios Windows Forms mediante su línea de comandos o herramientas visuales preferidas.

  2. Cree cualquier botón, elemento de menú u otro elemento de la interfaz de usuario que desee que los usuarios seleccionen para comprobar las actualizaciones. Desde el controlador de eventos del elemento, llame al método siguiente para comprobar si hay actualizaciones e instalarlas.

    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 la aplicación.

Utilizar Mage.exe para implementar una aplicación que comprueba mediante programación las actualizaciones

  • Siga las instrucciones para implementar su aplicación mediante Mage.exe como se explica en Tutorial: Implementar manualmente una aplicación ClickOnce. Al llamar a Mage.exe para generar el manifiesto de implementación, asegúrese de utilizar el modificador de la línea de comandos providerUrl y de especificar la dirección URL donde ClickOnce debe comprobar las actualizaciones. Si la aplicación se va a actualizar desde http://www.adatum.com/MyApp, por ejemplo, la llamada para generar el manifiesto de implementación sería similar a la siguiente:

    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
    

Utilizar MageUI.exe para implementar una aplicación que comprueba mediante programación las actualizaciones

  • Siga las instrucciones para implementar su aplicación mediante Mage.exe como se explica en Tutorial: Implementar manualmente una aplicación ClickOnce. En la ficha Deployment Options (Opciones de implementación), establezca el campo Start Location (Iniciar ubicación) en el manifiesto de aplicación en el que ClickOnce debe comprobar las actualizaciones. En la ficha Update Options (Opciones de actualización), desactive la casilla This application should check for updates (Esta aplicación buscará actualizaciones).

Seguridad

La aplicación debe tener permisos de plena confianza para utilizar la actualización mediante programación.

Vea también

Tareas

Cómo: Especificar una ubicación alternativa para las actualizaciones de la implementación

Conceptos

Elegir una estrategia de actualización de ClickOnce

Información general sobre la implementación de ClickOnce