Sdílet prostřednictvím


Postupy: Programová kontrola aktualizací aplikace pomocí rozhraní API nasazení ClickOnce

ClickOnce umožňuje dvě možnosti aktualizace aplikace po jejím nasazení.V první metodě je možné nakonfigurovat implementaci ClickOnce k automatickému zjišťování aktualizací v určitých intervalech.Ve druhé metodě můžete napsat kód používající třídu ApplicationDeployment, zjišťující aktualizace v závislosti na události, například žádosti uživatele.

Následující postupy ukazují některé kódy pro provádění programových aktualizací a také popisují, jak konfigurovat nasazení ClickOnce, chcete-li povolit kontroly programových aktualizací.

Chcete-li programově aktualizovat aplikace ClickOnce, musíte zadat umístění pro aktualizace.Toto je někdy nazýváno poskytovatel nasazení.Další informace o nastavení této vlastnosti naleznete v tématu Výběr strategie aktualizace ClickOnce.

[!POZNÁMKA]

Můžete také použít techniku popsanou níže pro instalaci aplikace z jednoho umístění, ale její aktualizace z jiného.Další informace naleznete v tématu Postupy: Určení alternativního umístění pro aktualizace nasazení.

Chcete-li vyhledat aktualizace pomocí programu

  1. Vytvořte novou aplikaci Windows Forms pomocí Vámi upřednostňovaného nástroje příkazového řádku nebo vizuálních nástrojů.

  2. Vytvořte jakékoli tlačítko, položku nabídky nebo jinou položku uživatelského rozhraní, kterou mají uživatelé volit, chtějí-li vyhledat aktualizace.Z obslužné rutiny této položky volejte následující metodu pro zjišťování aktualizací.

    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. Zkompilujte Vaší aplikaci.

Pužijte Mage.exe k nasazení aplikace, která vyhledává aktualizace programově

  • Postupujte podle pokynů pro nasazení aplikace pomocí Mage.exe, jak je vysvětleno v Návod: Ruční nasazení aplikace ClickOnce. Při volání Mage.exe pro generování manifestu nasazení, nezapomeňte použít přepínač příkazového řádku providerUrla určit adresu URL, kde by ClickOnce měla vyhledat aktualizace. Pokud vaše aplikace bude aktualizovat z http://www.adatum.com/MyApp, například volání ke generování manifestu nasazení může vypadat takto:

    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
    

Pužijte MageUI.exe k nasazení aplikace, která vyhledává aktualizace programově

  • Postupujte podle pokynů pro nasazení aplikace pomocí Mage.exe, jak je vysvětleno v Návod: Ruční nasazení aplikace ClickOnce. Na kartě Možnosti nasazení nastavte pole Umistění spuštění manifestu aplikace ClickOnce, kde by měla zkontrolovat aktualizace.Na kartě Možnosti aktualizace zrušte označení zaškrtávacího políčka Tato aplikace by měla Vyhledat aktualizace.

Zabezpečení

Aplikace musí mít plně oprávnění pro použití programových aktualizací.

Viz také

Úkoly

Postupy: Určení alternativního umístění pro aktualizace nasazení

Koncepty

Výběr strategie aktualizace ClickOnce

Publikování aplikací ClickOnce