Технология ClickOnce — использовать или забыть?

2 комментария

ClickOnce установка

Хочу поделиться собственным опытом использования технологии ClickOnce для развертывания приложений .NET. Постараюсь взглянуть на вопрос с разных сторон. Кстати, драфт этой статьи по разным причинам очень долго пролежал без дела. Теперь захотелось все же его опубликовать в виде статьи.

1. Что это вообще такое — ClickOnce?

Технология ClickOnce — это технология быстрого развертывания приложений с возможностью их автообновления. Разработчики приложений должны обеспечить удобное средство для установки и обновления собственных приложений. В ClickOnce это делается, что называется, «тремя кликами мыши». Все, что клиенту надо, это щелкнуть по ссылке (один из вариантов работы), дождаться окончания скачивания приложения и его установки и попрыгать радоваться установленному приложению.

Скачать файл

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

Казалось бы, в чем проблема, почему эту замечательную технологию не используют везде и всюду?  А это уже пункт 2.

2. Когда следует пользоваться ClickOnce?

Учитывая особенности установки приложений ClickOnce в профиль пользователя, надо отметить, что такое не всем подойдет.

По крайней мере мой опыт показал, что обратить внимание на технологию следует, если:

  • Это внутренний проект, вопросы корпоративной безопасности на который распространяются не так жестко
  • У Ваших клиентов нет проблем с той самой корпоративной безопасностью, им все равно, что они скачивают на свои компьютеры, сколько они проводят времени во «вконтактиках» и куда все эти приложения устанавливаются, а устанавливаются они прямиком в профиль пользователя, папка %userprofile%\Local Settings\Apps\2.0\.
  • Вы готовы решать проблемы запуска приложения ClickOnce из-за честной работы антивирусов, антимайлваре и т.п. антипрограмм
  • У Ваших клиентов нет никаких проблем с наличием браузера Internet Explorer

Таким образом, если проект не внутренний, то применять технологию для проекта следует, как минимум, крайне осмотрительно. Как вариант, можно сделать данную возможность альтернативной.

3. Какие наиболее распространенные ошибки возникают при работе с ClickOnce и как с ними бороться?

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

      1. Ошибка, связанная со сменой разрядности приложения — «System.Deployment.Application.InvalidDeploymentException (SubscriptionSemanticValidation). Удостоверение развертывания у поставщика развертывания не совпадает с исходным удостоверением развертывания».
        Совет: К сожалению, если в Visual Studio выставить разрядность приложения Any CPU, а затем, например, x86, при загрузке приложение ClickOnce упадет с указанной ошибкой. Лучше разрядность не менять у данного приложения, а сделать новое.
      2. При запуске приложения вылетает ошибка System.IO.FileNotFoundException
        Совет: попробовать разобраться, нет ли в сети «режущих» траффик программ. Это м.б. и антивирус на компьютере пользователя, и ПО на местном прокси. Возможно, действительно потерялся файл приложения. Стоит вспомнить, ничего ли Ваше приложение не складирует в GAC. Затем, если все в порядке, пройтись по этой ветке, еще по такой.
      3. System.Runtime.InteropServices.COMException
        — Присоединенное к системе устройство не работает. (Исключение из HRESULT: 0x8007001F)
        Решение: очистить папку %userprofile%\Local Settings\Apps\2.0\ от ВСЕГО. Вообще следует данный метод всегда держать в голове при работе с ClickOnce, может выручить и при других ошибках.
      4. The process cannot access the file и т.д.
        Замечание: Однажды подобная проблема была решена отрубанием антивируса.
      5. Приложение падает по каким-то внутренним причинам уже после удачной загрузки, причем только у определенных клиентов.
        Совет: тут ошибка может показаться слишком уж общей, но тут следует помнить, что приложение ClickOnce у нас устанавливается в профиль пользователя. А он бывает разделяемым. В этом случае используется сетевой путь до файлов приложения. Если Ваше приложение многокомпанентно, то может так получиться, что некоторая библиотека, например, категорически отказывается читать нужные ей файлы по сети. Такой библиотекой, например, является SQLite в ее стандартном исполнении для .NET. Она не хочет читать файлы базы данных по сетевому пути. Некоторые другие библиотеки, работающие с данной БД, позволяют это сделать, но при этом транзакционность передачи данных не гарантируется. Этот момент следует иметь ввиду. Хоть это и не проблема ClickOnce напрямую, но я все равно ее сюда включила  .
      6. Dfsvc.exe — обнаружена ошибка.
        Совет: DFSVC.EXE проверяет, установлено ли уже Ваше кливансовское приложение на компьютер жертвы пользователя и, если да, то насколько оно свежее. Сначала при необходимости удаляет старую версию приложения, затем уже устанавливает в профиль пользователя новую версию. Если возникла проблема с этим файлом, то, как вариант, можно переустановить .NET. Иногда вредоносное ПО может атаковать этот файл.

Итого, краткая выжимка:

  1. При необходимости очищаем папку %userprofile%\Local Settings\Apps\2.0\
  2. Следим за активностью антивирусов, их деятельность может нанести вред 
  3. Открываем ссылки ClickOnce при помощи Internet Explorer.

 

Также не забываем, что проблемы могут крыться и в самом .NET. Возможно, имела место «кривая» установка. Чтобы попытаться их устранить, можно воспользоваться утилитой Microsoft .NET Framework Repair Tool.

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

Еще стоит посмотреть в списке, который опубликовал сам Майкрософт.


2 комментария “Технология ClickOnce — использовать или забыть?”

  1. Геннадий Мальцев

    А еще у кликванс есть другая странная особенность. Если развернутое приложение запущено, то попытка его удалить из «Установки и удаления программ» не приводит к ошибке. Из списка установленных программ приложение исчезает, а папка Apps\2.0\ не очищается. И повторное развертывание приложения может привести к ошибкам.

    Ответить
    • NoService
      NoService

      Добрый день, Геннадий! Да, тоже с этой проблемой сталкивались.
      Иногда из-за этой «особенности» при установке приложения вылезают интересные ошибки вида «не удалось привести к типу…» http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif

      Ответить

Оставьте комментарий

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> <img src="" alt="" class="" width="" height="">

http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ab.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ac.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ag.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ah.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ai.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ak.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/am.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/an.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ao.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aq.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ar.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/at.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/av.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/aw.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/ay.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/az.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bb.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bc.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/bd.gif 
http://noservice.ru/wp-content/plugins/wp-monalisa/icons/be.gif 
больше...