Обновите существующее приложение, чтобы включить ClickOnce

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

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

Если исключить это, есть ли другие решения такого рода проблем?

PS: исходное приложение было разработано с помощью Visual Studio 2005 (то есть .NET 2.0 ). Сейчас я использую Visual Studio 2008.


person pufferfish    schedule 25.06.2009    source источник


Ответы (4)


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

ClickOnce - это установка в песочнице на стороне клиента. Он не будет знать об уже установленной версии 1.0. Он просто проверяет, был ли его GUID уже установлен через ClickOnce, и если да обновите его, но только если предыдущая версия была развернута через ClickOnce.

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

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

Или:

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

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

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

person The Matt    schedule 25.06.2009

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

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

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

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

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

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

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

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

Удачи.

person pelazem    schedule 02.08.2009
comment
Спасибо за подробный ответ. ClickOnce действительно звучит так, будто это больше проблем, чем того стоит ... Мне нравится ваше домашнее решение. - person pufferfish; 03.08.2009

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

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

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

person Judah Gabriel Himango    schedule 25.06.2009

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

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

person BBlake    schedule 25.06.2009