Практическое руководство. Проверка обновлений для приложения программным способом с помощью функций API развертывания технологии ClickOnce

Обновлен: Ноябрь 2007

Технология ClickOnce предоставляет два способа обновления приложения после его развертывания. В первом способе можно настроить развертывание технологии ClickOnce для автоматической проверки обновлений через определенные периоды времени. Во втором способе можно написать программный код, который использует класс ApplicationDeployment для проверки обновлений на основе события, такого как запрос пользователя.

В следующих процедурах показан код для выполнения программного обновления, а также описывается настройка развертывания ClickOnce для обеспечения проверок программных обновлений.

Чтобы обновлять приложение ClickOnce программно, следует задать местоположение для обновлений. Эта процедура иногда упоминается как поставщик развертывания. Дополнительные сведения о задании этого свойства см. в разделе Выбор стратегии обновления ClickOnce.

ms404263.alert_note(ru-ru,VS.90).gifПримечание.

Для развертывания приложения из одного места и обновления его из другого места можно также использовать метод, описываемый ниже. Дополнительные сведения см. в разделе Практическое руководство. Задание альтернативного местоположения для обновлений развертывания.

Проверка наличия обновлений программным способом

  1. Создайте новое приложение Windows Forms с помощью командной строки или предпочитаемых визуальных средств.

  2. Создайте на свой выбор кнопку, пункт меню или любой другой элемент пользовательского интерфейса, с помощью которого пользователи будут выбирать проверку обновлений. Чтобы проверить и установить обновления, из обработчика событий для этого элемента вызовите следующий метод.

    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. Скомпилируйте используемое приложение.

Использование программы Mage.exe для развертывания приложения, которое программно проверяет наличие обновлений

  • Следуйте инструкциям по развертыванию приложения с помощью программы Mage.exe в соответствии с их описанием в разделе Пошаговое руководство. Развертывание приложения ClickOnce вручную. При вызове программы Mage.exe для создания манифеста развертывания следует использовать параметр providerUrl командной строки и необходимо указать URL-адрес, где приложение ClickOnce должно проверять наличие обновлений. Например, если приложение будет обновляться с веб-узла http://www.adatum.com/MyApp, вызов для создания манифеста развертывания мог бы выглядеть следующим образом:

    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
    

Использование MageUI.exe для развертывания приложения, которое проверяет наличие обновлений программным способом

  • Следуйте инструкциям по развертыванию приложения с помощью программы Mage.exe в соответствии с их описанием в разделе Пошаговое руководство. Развертывание приложения ClickOnce вручную. На вкладке Параметры развертывания установите значение поля Начальное местоположение равным манифесту приложения, который должен проверяться с помощью ClickOnce на наличие обновлений. На вкладке Параметры обновления снимите флажок Приложение должно проверять обновления.

Безопасность

Для использования программного обновления приложение должно иметь разрешения полного доверия.

См. также

Задачи

Практическое руководство. Задание альтернативного местоположения для обновлений развертывания

Основные понятия

Выбор стратегии обновления ClickOnce

Обзор развертывания ClickOnce