Ручное обновление ClickOnce завершается, но не обновляется

У меня есть проект шаблона VSTO Excel, который устанавливается/обновляется с помощью ClickOnce. Если я запускаю автоматическое обновление, оно обновляется нормально, но я хотел бы предоставить пользователю возможность ручного обновления.

Проблема в том, что выполнение ApplicationDeployment.CurrentDeployment.UpdateAsync (или .Update) не приводит к каким-либо ошибкам, а развертывание просто не обновляется. Номер версии в программе «Установка и удаление» остается прежним, и, что еще более необычно, флаг ApplicationDeployment.IsNetworkDeployed переключается на false.

Таким образом, кажется, что единственным эффектом запуска .Update является установка для IsNetworkDeployed значения false. Полный код немного длинноват, но в основном он сводится к следующему:

Private Sub ThisWorkbook_Startup() Handles Me.Startup
  Dim info As UpdateCheckInfo

    If ApplicationDeployment.IsNetworkDeployed Then
        Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
        info = AD.CheckForDetailedUpdate
        If info.UpdateAvailable Then
            AD.UpdateAsync()
        End If
    End If

End Sub

person QuinRiva    schedule 25.09.2013    source источник
comment
У Криса Мейки есть блог, в котором он обсуждает обходной путь этой проблемы, но на самом деле не решает вопрос, почему .Update не работает. Я бы предпочел решение, в котором мне не нужно перезапускать Excel.   -  person QuinRiva    schedule 26.09.2013


Ответы (1)


Извините, но вам придется перезапустить Excel, если вы устанавливаете новую версию надстройки VSTO и хотите, чтобы она использовалась. Причина этого в том, что при запуске Excel проверяет и находит надстройку VSTO и копирует сборку в теневое расположение. Он не запускает его из кэша ClickOnce. Это связано с тем, что если вы сделаете обновление, оно не повлияет на Office — сборка будет продолжать выполняться в теневом расположении, и вы сможете обновить версию. Но новая версия не загрузится, пока вы не выйдете из Excel и не запустите его снова, после чего новая версия сборки будет скопирована в теневое расположение и загружена.

person RobinDotNet    schedule 18.10.2013
comment
Похоже, это так. Обходной путь заключается в написании отдельного инструмента, который перезапускает Excel после обновления и открывает соответствующий документ. - person QuinRiva; 19.11.2014