Gewusst wie: Programmgesteuertes Suchen nach Anwendungsupdates mit der API für die ClickOnce-Bereitstellung

ClickOnce bietet zwei Möglichkeiten, eine bereitgestellte Anwendung zu aktualisieren. Mit der ersten Methode können Sie die ClickOnce-Bereitstellung so konfigurieren, dass in bestimmten Intervallen automatisch nach Updates gesucht wird. Mit der zweiten Methode können Sie Code schreiben, der mit der ApplicationDeployment-Klasse auf der Grundlage eines Ereignisses, z. B. einer Benutzeranforderung, nach Updates sucht.

In den folgenden Verfahren wird Code für ein programmgesteuertes Update gezeigt und beschrieben, wie die ClickOnce-Bereitstellung für die Aktivierung der programmgesteuerten Suche nach Updates konfiguriert wird.

Sie müssen einen Speicherort für Updates angeben, damit eine ClickOnce-Anwendung programmgesteuert aktualisiert werden kann. Dies wird auch als Bereitstellungsanbieter bezeichnet. Weitere Informationen zur Einstellung dieser Eigenschaft finden Sie unter Auswählen einer Strategie für die ClickOnce-Aktualisierung.

Tipp

Sie können die im Folgenden beschriebene Methode auch einsetzen, um Ihre Anwendungen von einem Ort aus bereitzustellen, sie aber von einem anderen Ort aus zu aktualisieren. Weitere Informationen finden Sie unter Gewusst wie: Angeben eines anderen Speicherorts für Bereitstellungsaktualisierungen.

So suchen Sie programmgesteuert nach Updates

  1. Erstellen Sie mit den von Ihnen bevorzugten Befehlszeilen- oder visuellen Tools eine neue Windows Forms-Anwendung.

  2. Erstellen Sie eine beliebige Schaltfläche, ein Menüelement oder ein anderes Benutzeroberflächenelement, das Benutzer für die Suche nach Updates auswählen sollen. Rufen Sie vom Ereignishandler dieses Elements die folgende Methode auf, um nach Updates zu suchen und sie zu installieren.

    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. Kompilieren Sie Ihre Anwendung.

Verwenden von Mage.exe, um eine Anwendung bereitzustellen, die programmgesteuert nach Updates sucht

  • Befolgen Sie die Anweisungen zum Bereitstellen der Anwendung mit Mage.exe, wie in Exemplarische Vorgehensweise: Manuelles Bereitstellen einer ClickOnce-Anwendung erläutert. Wenn Sie Mage.exe aufrufen, um das Bereitstellungsmanifest zu generieren, achten Sie darauf, dass Sie den providerUrl-Befehlszeilenschalter verwenden und die URL angeben, unter der ClickOnce nach Updates suchen soll. Wenn Ihre Anwendung z. B. von https://www.microsoft.com/de/de/default.aspx aus aktualisiert, könnte Ihr Aufruf für die Generierung des Bereitstellungsmanifests folgendermaßen aussehen:

    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
    

Verwenden von MageUI.exe, um eine Anwendung bereitzustellen, die programmgesteuert nach Updates sucht

  • Befolgen Sie die Anweisungen zum Bereitstellen der Anwendung mit Mage.exe, wie in Exemplarische Vorgehensweise: Manuelles Bereitstellen einer ClickOnce-Anwendung erläutert. Legen Sie auf der Registerkarte Bereitstellungsoptionen für das Feld Startspeicherort das Anwendungsmanifest fest, in dem ClickOnce nach Updates suchen soll. Deaktivieren Sie auf der Registerkarte Aktualisierungsoptionen das Kontrollkästchen Die Anwendung soll nach Updates suchen.

Sicherheit

Die Anwendung muss Berechtigungen für volle Vertrauenswürdigkeit haben, um die programmgesteuerte Aktualisierung zu verwenden.

Siehe auch

Aufgaben

Gewusst wie: Angeben eines anderen Speicherorts für Bereitstellungsaktualisierungen

Konzepte

Auswählen einer Strategie für die ClickOnce-Aktualisierung

Veröffentlichen von ClickOnce-Anwendungen