Вопрос

Можно ли внедрить функциональность ClickOnce в существующее приложение?

Сценарий таков:Версия 1.0 уже установлена в клиентских помещениях.Я хотел бы отправить им новый установочный пакет, который будет обновлен до версии 1.1 с функциональностью ClickOnce, тем самым делая будущие обновления "без усилий".

За исключением этого, существуют ли какие-либо другие решения такого рода проблем?

P.S.:Оригинальное приложение было разработано с Visual Studio 2005 (то есть .NET 2.0).Я использую Visual Studio 2008 сейчас же.

Это было полезно?

Решение

Нет, это невозможно при стандартном сценарии развертывания ClickOnce.

ClickOnce - это изолированная установка на стороне клиента.Он не будет знать об уже установленной версии 1.0.Он просто собирается проверить, является ли его Идентификатор ПОЛЬЗОВАТЕЛЯ уже установлена через ClickOnce, и если да, обновите ее, но только в том случае, если предыдущая версия была развернута через ClickOnce.

В вашем случае, если пользователь установил версию 1.1, обе версии будут установлены параллельно.Версия 1.0 обновляться не будет, поскольку ClickOnce не знает о существовании связи, поскольку она была развернута другим методом.Если им больше не нужна версия 1.0, им нужно будет удалить ее вручную.Как только вы получите версию 1.1, развернутую с помощью ClickOnce, последующие обновления будут работать корректно.

Не думайте о ClickOnce как о чем-то, что вы "включаете", думайте об этом как о методе развертывания.

В качестве альтернативы:

Я должен уточнить, что то, что вы ищете, невозможно при стандартном развертывании ClickOnce.Однако вы упомянули, что собираетесь отправить им начальный установочный файл.В этом случае у вас может быть возможное обходное решение:

  1. Скрипт установочного файла для автоматического удаления установки версии 1.0
  2. Создайте сценарий установочного файла для запуска установки ClickOnce.

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

Другие советы

Обязательно тщательно протестируйте развертывание ClickOnce в среде вашего клиента.Я опускаю здесь подробности, но с ClickOnce возникает много проблем.Я поддерживаю приложение ClickOnce уже 3,5 года и столкнулся со многими проблемами с манифестами, необходимостью вручную удалять папки хранилища в изолированной среде, чтобы обновления устанавливались правильно, и т.д.- если вы поищете проблемы с ClickOnce в Интернете, вы найдете довольно много проблем на форумах MSDN и в других местах, многие из которых MS, похоже, не хочет решать, поскольку они открыты с Visual Studio 2005.

Кроме того, имейте в виду потенциальную ошибку в ClickOnce до версии .NET 3.5 SP1.Если у вас нет собственного сертификата развертывания программного обеспечения из КА распознанный клиентскими компьютерами, Visual Studio использует "временный" сертификат (*.pfx), срок действия которого истекает через год с момента создания.По истечении этого времени последующие выпуски обновлений, вероятно, не будут устанавливаться и будут показывать пользователям пугающие сообщения об истечении срока действия сертификата.Microsoft исправила это в .NET 3.5 SP1, но вам пришлось покопаться в примечаниях к выпуску, чтобы найти комментарии о том, что временные или постоянные сертификаты больше не требуются.Итак, если у вас нет общедоступного сертификата центра сертификации, и вы будете поддерживать это приложение в течение некоторого времени, то убедитесь, что вы используете .NET 3.5 SP1.

В зависимости от сложности вашего сценария, поскольку вы спрашиваете о других решениях, мы в итоге использовали подход "разработайте свой собственный", который выглядит примерно так.

Каждый обновленный выпуск увеличивает версию сборки по мере необходимости.

Сборка содержит пользовательский шаг для автоматического создания файла с новой версией сборки.

Проект развертывания копирует файл версии в выходной каталог с помощью MSI.

Каждый раз, когда установленное приложение запускается, оно сравнивает свою собственную версию с версией в файле version в папке deploy.Если они отличаются, закройте приложение и запустите MSI, которое мы настроили на автоматическое удаление старых версий приложений.

Это "ClickOnce для бедных" для среды, где вообще нет средств развертывания приложений avl (даже рекламы рекламных приложений), поэтому мы обошлись.Опять же, этот подход может быть недостаточно сложным для вас, но для нас он прекрасно работает.

Желаю удачи.

Лучший способ, который я знаю, - это отправить им установочную программу, которая:

  1. Удаляет текущую версию
  2. Запускает приложение ClickOnce, размещенное в Интернете.

Благодаря этому у вас будет разумный опыт обновления, и с этого момента ClickOnce сможет обрабатывать обновления самостоятельно.

Я думаю, что в этом случае "самым простым" решением было бы просто использовать развертывание ClickOnce для версии 1.1 и как часть этой новой версии вашего приложения иметь конфигурационный файл по умолчанию с каким-либо флагом первого запуска, который при первом запуске пользователем и виде этого флага первого запуска ищет предыдущую версию, копирует все существующие параметры конфигурации, а затем автоматически удаляет предыдущую версию.

Это потребовало бы некоторого программирования с вашей стороны, но это решение, на котором я остановился на предыдущей работе, чтобы выполнить аналогичную задачу по обновлению служебного приложения для использования Clickonce, где раньше этого не было.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top