Condividi tramite


Procedura: controllare gli aggiornamenti dell'applicazione a livello di codice tramite l'API della distribuzione ClickOnce

Aggiornamento: novembre 2007

In ClickOnce è possibile procedere in due modi per aggiornare un'applicazione già distribuita. Il primo modo consiste nel configurare la distribuzione ClickOnce affinché venga controllata automaticamente la disponibilità degli aggiornamenti a determinati intervalli. Il secondo modo invece consiste nello scrivere codice in cui viene utilizzata la classe ApplicationDeployment affinché venga controllata la disponibilità degli aggiornamenti in base a un evento, ad esempio una richiesta dell'utente.

Nelle procedure descritte di seguito viene illustrato il codice per l'esecuzione di un aggiornamento a livello di codice e viene descritto inoltre come configurare la distribuzione ClickOnce in modo da attivare i controlli della disponibilità degli aggiornamenti a livello di codice.

Per aggiornare un'applicazione ClickOnce a livello di codice, è necessario specificare un percorso per gli aggiornamenti, denominato talvolta provider di distribuzione. Per ulteriori informazioni sull'impostazione di questa proprietà, vedere Scelta di una strategia di aggiornamento ClickOnce.

Nota:

La tecnica descritta di seguito può essere utilizzata inoltre per distribuire l'applicazione da una posizione e aggiornarla da un'altra. Per ulteriori informazioni, vedere Procedura: specificare un percorso alternativo per gli aggiornamenti della distribuzione.

Per controllare la disponibilità degli aggiornamenti a livello di codice

  1. Creare una nuova applicazione Windows Form utilizzando gli strumenti da riga di comando o visivi preferiti.

  2. Creare pulsanti, voci di menu o altri elementi dell'interfaccia utente che si desidera che vengano utilizzati dagli utenti per controllare la disponibilità degli aggiornamenti. Dal gestore eventi dell'elemento creato chiamare il metodo seguente per controllare la disponibilità e installare gli aggiornamenti.

    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. Compilare l'applicazione.

Utilizzo di Mage.exe per la distribuzione di un'applicazione per il controllo della disponibilità degli aggiornamenti a livello di codice

  • Seguire le istruzioni per la distribuzione dell'applicazione con Mage.exe descritte in Procedura dettagliata: distribuzione manuale di un'applicazione ClickOnce. Quando si chiama Mage.exe per generare il manifesto di distribuzione, utilizzare l'opzione della riga di comando providerUrl e specificare l'URL in cui deve essere controllata la disponibilità degli aggiornamenti. Se ad esempio gli aggiornamenti dell'applicazione sono contenuti in http://www.adatum.com/MyApp, la chiamata per generare il manifesto di distribuzione sarà simile alla seguente:

    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
    

Utilizzo di MageUI.exe per la distribuzione di un'applicazione per il controllo della disponibilità degli aggiornamenti a livello di codice

  • Seguire le istruzioni per la distribuzione dell'applicazione con Mage.exe descritte in Procedura dettagliata: distribuzione manuale di un'applicazione ClickOnce. Nella scheda Opzioni di distribuzione impostare il campo Posizione di partenza sul manifesto dell'applicazione che deve essere controllato per ricercare eventuali aggiornamenti. Nella scheda Opzioni aggiornamento deselezionare la casella di controllo Controlla aggiornamenti dell'applicazione.

Sicurezza

L'applicazione deve disporre di autorizzazioni di attendibilità totale per utilizzare l'aggiornamento a livello di codice.

Vedere anche

Attività

Procedura: specificare un percorso alternativo per gli aggiornamenti della distribuzione

Concetti

Scelta di una strategia di aggiornamento ClickOnce

Cenni preliminari sulla distribuzione ClickOnce