Развертывание приложения.Обработка исключений методом CheckForUpdateAsync

#c# #winforms #deployment #updates

#c# #winforms #развертывание #Обновления

Вопрос:

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

Однако, хотя он работает нормально, если сервер подключен к Сети, если возникает сетевая ошибка или сервер отключается во время проверки, .NET возвращает ошибку Socket или WebException .

Я пытался поймать ошибки:

         try
        {
            _ad.CheckForUpdateAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
  

Например, но даже если я помещу WebException или любой другой тип исключения в этот catch, похоже, он его не улавливает. Я предполагаю, что это потому, что CheckForUpdateAsync() происходит в отдельном потоке.

Есть ли какой-либо способ надежно перехватить эти ошибки, чтобы у меня не было случайных .NET errors появлений во время работы?

Ответ №1:

вы можете проверить ошибки при развертывании приложения. Метод CheckForUpdateAsync путем добавления CheckForUpdateCompleted еще, как показано ниже

 ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
ad.CheckForUpdateCompleted  = new CheckForUpdateCompletedEventHandler(ad_CheckForUpdateCompleted);
  

в

 void ad_CheckForUpdateCompleted(object sender, CheckForUpdateCompletedEventArgs e)
{
    if (e.Error != null)
    {
       // e.Error details here 
    }
}
  

вы можете найти InvalidDeploymentException и DeploymentDownloadException подробную информацию в свойстве ошибки события CheckForUpdateCompleted.

Комментарии:

1. Я не ожидал, что он вернется в это местоположение; учитывая, что проверка завершилась неудачей, я бы не ожидал, что завершенное событие сработает. Но я попробую, и лайк, если у меня не получится 🙂 Тай!

2. поскольку это асинхронный метод, результат необходимо увидеть при завершении события подробнее на MSDN