Programová kontrola aktualizací aplikací pomocí rozhraní API pro nasazení ClickOnce

ClickOnce nabízí dva způsoby aktualizace aplikace po nasazení. V první metodě můžete nakonfigurovat nasazení ClickOnce tak, aby v určitých intervalech automaticky kontrolovali aktualizace. Ve druhé metodě můžete napsat kód, který používá ApplicationDeployment třídu ke kontrole aktualizací na základě události, jako je například požadavek uživatele.

Poznámka:

Třída ApplicationDeployment a rozhraní API v System.Deployment.Application oboru názvů nejsou podporovány v .NET Core a .NET 5 a novějších verzích. V .NET 7 se podporuje nová metoda přístupu k vlastnostem nasazení aplikace. Další informace naleznete v tématu Access ClickOnce vlastnosti nasazení v .NET. .NET 7 nepodporuje ekvivalent metod ApplicationDeployment.

Následující postupy ukazují kód pro provádění programové aktualizace a také popisují, jak nakonfigurovat nasazení ClickOnce pro povolení programových kontrol aktualizací.

Chcete-li aktualizovat aplikaci ClickOnce programově, musíte zadat umístění pro aktualizace. Někdy se to označuje jako poskytovatel nasazení. Další informace o nastavení této vlastnosti naleznete v tématu Volba strategie aktualizace ClickOnce.

Poznámka:

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

Kontrola aktualizací prostřednictvím kódu programu

  1. Pomocí upřednostňovaných nástrojů příkazového řádku nebo vizuálních nástrojů vytvořte novou model Windows Forms aplikaci.

  2. Vytvořte libovolné tlačítko, položku nabídky nebo jinou položku uživatelského rozhraní, kterou mají uživatelé vybrat, aby zkontrolovali aktualizace. Z obslužné rutiny události této položky zavolejte následující metodu, která zkontroluje a nainstaluje aktualizace.

    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. Zkompilujte aplikaci.

Použití Mage.exe k nasazení aplikace, která programově kontroluje aktualizace

  • Postupujte podle pokynů k nasazení aplikace pomocí Mage.exe, jak je vysvětleno v návodu: Ruční nasazení aplikace ClickOnce. Při volání Mage.exe k vygenerování manifestu nasazení nezapomeňte použít přepínač providerUrlpříkazového řádku a zadat adresu URL, kde clickOnce má vyhledat aktualizace. Pokud se vaše aplikace aktualizuje například z http://www.adatum.com/MyAppvolání pro vygenerová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
    

Použití MageUI.exe k nasazení aplikace, která programově kontroluje aktualizace

  • Postupujte podle pokynů k nasazení aplikace pomocí Mage.exe, jak je vysvětleno v návodu: Ruční nasazení aplikace ClickOnce. Na kartě Možnosti nasazení nastavte pole Počáteční umístění na manifest aplikace ClickOnce by mělo vyhledat aktualizace. Na kartě Možnosti aktualizace zrušte zaškrtnutí políčka Tato aplikace by měla zkontrolovat aktualizace.

Zabezpečení rozhraní .NET Framework

Aby vaše aplikace používala programovou aktualizaci, musí mít oprávnění plné důvěryhodnosti.