Comment : vérifier la disponibilité de mises à jour des applications par programme à l'aide de l'API du déploiement ClickOnce

Mise à jour : novembre 2007

ClickOnce offre deux méthodes de mise à jour d'une application après son déploiement. La première méthode consiste à configurer le déploiement ClickOnce pour vérifier automatiquement les mises à jour à certains intervalles. La seconde méthode consiste à écrire du code qui utilise la classe ApplicationDeployment pour vérifier les mises à jour basées sur un événement, tel qu'une demande d'utilisateur.

Les procédures suivantes affichent du code pour effectuer une mise à jour programmatique et indiquent également comment configurer votre déploiement ClickOnce pour activer des vérifications de mise à jour programmatique.

Pour mettre à jour une application ClickOnce par programme, vous devez spécifier un emplacement pour les mises à jour. Cette propriété est parfois désignée sous le nom de fournisseur de déploiement. Pour plus d'informations sur la définition de cette propriété, consultez Choix d'une stratégie de mise à jour ClickOnce.

Remarque :

Vous pouvez également utiliser la technique décrite ci-dessous pour déployer votre application à partir d'un emplacement et la mettre à jour à partir d'un autre. Pour plus d'informations, consultez Comment : spécifier un autre emplacement pour les mises à jour du déploiement.

Pour vérifier des mises à jour par programme

  1. Créez une nouvelle application Windows Forms en utilisant vos outils de ligne de commande ou visuels par défaut.

  2. Créez le bouton, l'élément de menu ou tout autre élément de l'interface utilisateur que vous souhaitez que vos utilisateurs sélectionnent pour vérifier les mises à jour. Dans le gestionnaire d'événements de cet élément, appelez la méthode suivante pour vérifier et installer les mises à jour.

    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. Compilez votre application.

Utilisation de Mage.exe pour déployer une application vérifiant des mises à jour par programme

  • Suivez les instructions concernant le déploiement de votre application à l'aide de Mage.exe, comme indiqué dans Procédure pas à pas : déploiement manuel d'une application ClickOnce. Lorsque vous appelez Mage.exe pour générer le manifeste de déploiement, veillez à utiliser le commutateur de ligne de commande providerUrl et à spécifier l'URL où ClickOnce doit vérifier les mises à jour. Si votre application est mise à jour à partir de http://www.adatum.com/MyApp, par exemple, votre appel pour générer le manifeste de déploiement peut se présenter de la manière suivante :

    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
    

Utilisation de MageUI.exe pour déployer une application vérifiant des mises à jour par programme

  • Suivez les instructions concernant le déploiement de votre application à l'aide de Mage.exe, comme indiqué dans Procédure pas à pas : déploiement manuel d'une application ClickOnce. Sous l'onglet Deployment Options, définissez le champ Start Location sur le manifeste d'application dans lequel ClickOnce doit vérifier les mises à jour. Sous l'onglet Update Options, désactivez la case à cocher This application should check for updates.

Sécurité

Votre application doit disposer des autorisations de type Confiance totale pour utiliser la mise à jour par programme.

Voir aussi

Tâches

Comment : spécifier un autre emplacement pour les mises à jour du déploiement

Concepts

Choix d'une stratégie de mise à jour ClickOnce

Vue d'ensemble du déploiement ClickOnce