Búsqueda de actualizaciones de aplicaciones mediante programación utilizando la API de implementación de ClickOnce

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

Nota

La clase ApplicationDeployment y las API del espacio de nombres System.Deployment.Application no se admiten en .NET Core y .NET 5 y versiones posteriores. En .NET 7 se admite un nuevo método de acceso a las propiedades de implementación de aplicaciones. Para obtener más información, consulte Acceso a las propiedades de implementación de ClickOnce en .NET. .NET 7 no admite el equivalente de los métodos ApplicationDeployment.

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

Para actualizar una aplicación ClickOnce mediante programación, debe especificar una ubicación para las actualizaciones. Esto a veces se denomina proveedor de implementación. Para obtener más información sobre cómo establecer esta propiedad, consulte Selección de una estrategia de actualización de ClickOnce.

Nota

También puede usar la técnica que se describe a continuación para implementar la aplicación desde una ubicación, pero actualizarla desde otra. Para obtener más información, consulte Cómo: Especificar una ubicación alternativa para las actualizaciones de la implementación.

Instrucciones para la búsqueda de actualizaciones mediante programación

  1. Cree una nueva aplicación de Windows Forms mediante la línea de comandos o las herramientas visuales que prefiera.

  2. Cree cualquier botón, elemento de menú u otro elemento de interfaz de usuario que quiera que los usuarios seleccionen para buscar actualizaciones. Desde el controlador de eventos de ese elemento, active un método siguiente para buscar e instalar actualizaciones.

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

Uso de Mage.exe para implementar una aplicación que comprueba mediante programación si hay actualizaciones

  • Siga las instrucciones para implementar la aplicación mediante Mage.exe como se explica en Tutorial: Implementación manual de una aplicación ClickOnce. Al llamar a Mage.exe para generar el manifiesto de implementación, asegúrese de usar el modificador de línea de comandos providerUrl y de especificar la dirección URL donde ClickOnce debe comprobar si hay actualizaciones. Si la aplicación se actualizará desde http://www.adatum.com/MyApp, por ejemplo, la llamada para generar el manifiesto de implementación podría tener este aspecto:

    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
    

Uso de MageUI.exe para implementar una aplicación que comprueba mediante programación si hay actualizaciones

  • Siga las instrucciones para implementar la aplicación mediante Mage.exe como se explica en Tutorial: Implementación manual de una aplicación ClickOnce. En la pestaña Opciones de implementación, establezca el campo Ubicación de inicio en el manifiesto de aplicación que ClickOnce debe comprobar para ver si hay actualizaciones. En la pestaña Opciones de actualización, desactive la casilla Esta aplicación debe buscar actualizaciones.

Seguridad de .NET Framework

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