О технологии ClickOnce

Введение в технологию ClickOnce

 

ClickOnce представляет собой технологию развертывания приложений, позволяющую вам создавать самообновляемые приложения на платформе Windows, которые могут быть инсталлированы и запущены с минимальным интерактивным взаимодействием с пользователем. Использование технологии ClickOnce позволяет преодолеть три основных недостатка присущих развертыванию приложений на клиентской машине:

  • Трудности с обновлением приложений. При развертывании приложений с помощью Microsoft Windows Installer всякий раз, когда требуется обновить приложение, пользователь должен переинсталлировать приложение целиком. Развертывая свое приложение с помощью ClickOnce вы можете предоставить автоматические обновления. Загружается только та часть приложения, которая имеет изменения, затем полное, обновленное приложение переинсталлируется в новый соседний каталог. Хотя в обоих описаниях присутствует "переинсталляция"- это разные вещи и вы в этом убедитесь в дальнейшем.
  • Воздействие на компьютер пользователя. При развертывании приложений с помощью Microsoft Windows Installer приложение часто зависит от компонентов, предназначенных для совместного использования (тех, что помещены в каталог Microsoft Shared). При этом возможны конфликты версий. При использовании ClickOnce ваше приложение самодостаточно и не влияет, а также не зависит от других приложений. Все необходимые для работы библиотеки включены в развертывание ClickOnce.
  • Разрешения в системе безопасности. Windows Installer при развертывании приложений требует административных полномочий. Развертывание с помощью ClickOnce позволяет пользователям, не имеющих административных привилегий инсталлировать приложение и разрешает только те разрешения Code Access Security, которые необходимы для инсталляции приложения.

По мнению Microsoft именно эти три недостатка иногда вынуждают разработчиков разрабатывать Web приложения и отказываться от приложений на платформе Windows, лишая тем самым конечного пользователя тех возможностей, которые несут в себе последние. Рассматриваемая технология позволяет объединить достоинства, присущие обоих классам приложений.

Что представляет собой приложение ClickOnce?

Если объяснять коротко, то  приложение ClickOnce представляет собой любое приложение Windows Presentation Foundation, Windows Forms, консольное или прочее, которое опубликовано посредством технологии ClickOnce. Есть три способа публикации приложений ClickOnce: с Web страницы, с сетевого файл-сервера или с любого медиа носителя, например с CD-ROM, DVD-ROM или флэш-диска. Есть два варианта инсталляции: "offline" и "online-only". В первом случае приложение загружается с носителя и устанавливается на диске компьютера конечного пользователя и доступно в любое время (точно так же, как в случае традиционных инсталляций различных продуктов). Во-втором, пользователь должен каждый раз загружать приложение заново, что к примеру удобно при использовании подписных служб. В этом случае, в компьютер пользователя ничего не инсталлируется, а запуск приложения осуществляется из временного каталога. После завершения работы с приложением содержимое каталога уничтожается. Так как приложения ClickOnce по своей сути изолированы и несут "все в себе", инсталляция или работа приложения не может повредить работе других приложений. Каждое такое приложение инсталлируется и запускается из своего собственного безопасного кэша уровня конкретного пользователя. Приложения запускаются в безопасных зонах Интернет или Интранет. Однако, если есть необходимость, приложение может затребовать более высокий уровень безопасности. Подробнее об этом в первой части цикла статей.

Как уже было сказано ранее, приложения ClickOnce могут быть самообновляемые, то есть, они могут проверять наличие новых версий и как только последние станут доступными, приложение может произвести автоматическое замещение любых обновленных файлов. Разработчик приложения может определить поведение обновления приложения; сетевой администратор может также управлять стратегией обновлений, например, определить обновления, как обязательные. Обновления могут быть откачены к предыдущей версии как самим конечным пользователем, так и администратором. Речь об этом пойдет в отдельной статье цикла.

Как работает приложение ClickOnce?

Ядро архитектуры развертывания ClickOnce основано на двух файлах XML манифестов: манифесте приложения и манифесте развертывания. Манифест приложения описывает само приложение, включая сборки (assemblies), зависимости и файлы, которые собственно и составляют приложение, требования безопасности в части разрешений, а также место размещения возможных обновлений. Ниже приведен фрагмент файла манифеста приложения

 

  <trustInfo>
    <security>
      <applicationRequestMinimum>
        <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
        <defaultAssemblyRequest permissionSetReference="Custom" />
      </applicationRequestMinimum>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!--
           вариантты запрашиваемых привилегий 
           <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
           <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
           <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
             при желании использовать виртуализацию файла и реестра 
             (для обратной совместимости), 
             вы можете удалить узел requestedExecutionLevel целиком
         -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentOS>
      <osVersionInfo>
        <os majorVersion="4" minorVersion="10" buildNumber="0" servicePackMajor="0" />
      </osVersionInfo>
    </dependentOS>
  </dependency>
  <dependency>
    <dependentAssembly dependencyType="preRequisite" allowDelayedBinding="true">
      <assemblyIdentity name="Microsoft.Windows.CommonLanguageRuntime" 
      version="2.0.50727.0" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly dependencyType="install" 
                          allowDelayedBinding="true" 
                          codebase="WebLauncher.exe" 
                          size="5632">
      <assemblyIdentity name="WebLauncher" version="1.0.0.0" 
      language="neutral" processorArchitecture="msil" />
      ...
    </dependentAssembly>
  </dependency>
  <file name="gdiplus.dll" size="1638400">
  ...  
  </file>
  <file name="jsfso_google.exe" size="36933">
  ...
  </file>
  <file name="msvcr70.dll" size="344064">
  ...
  </file>
  <file name="vfp9r.dll" size="4722688">
  ... 
  </file>
  <file name="VFP9RENU.DLL" size="1187840">
  ...
  </file>
  <file name="vfp9t.dll" size="3891200">
  ...
  </file>

 

Какую информацию вы можете почерпнуть из этого файла?

Минимально возможная версия операционной системы Windows 2000. Для работы приложения в системе должен быть установлено .Net Framework 2.0, о чем свидетельствуют значения атрибутов name и version дочернего узла "assemblyIdentity"  родительского узла "dependentAssembly" с атрибутом dependencyType установленным в "preRequisite (необходимый как условие)".  

Манифест развертывания описывает процесс развертывания и создается автором с помощью инструмента Mage.exe, входящего в состав .NET Framework SDK, либо генерируется Microsoft Visual Studio 2005/2008 в процессе создания приложения ClickOnce. После того, как манифест создан, он копируется в место, из которого будет развертываться приложение.

После того, как приложение создано и опубликовано, оно готово к использованию конечным пользователем. В зависимости от размещения приложения пользователю достаточно щелкнуть на иконке приложения в случае установки с файл-сервера или медиа-носителей или по кнопке Run (Запустить), если приложение устанавливается из Web сайта, размещенного в Интернет или Интранет. Если приложение инсталлировалось как "offline", то оно вносится в меню Start конечного пользователя и в оснастку Add/Remove Programs панели управления. В отличие от других видов развертывания ничего не вносится ни в каталог Program Files, ни в реестр, ни на рабочий стол пользователя. При этом для инсталляции не требуется административных привилегий.

В приведенной ниже таблице сравниваются возможности развертывания приложений с помощью ClickOnce и Windows Installer

 

Функциональная возможность ClickOnce Windows Installer

Автоматическое обновление1

Да

Да

Откат после инсталляции2

Да

Нет

Обновление приложения с Web

Да

Нет

Не оказывает влияния на совместно используемые компоненты или прочие приложения

Да

Нет

Предоставляемые разрешения безопасности (Security permissions)

Предоставляет только те разрешения, которые необходимы для приложения (более безопасно)

По умолчанию разрешает Full Trust (менее безопасно)

Требуемые разрешения безопасности

Internet или Intranet Zone (Full Trust только для инсталляции с CD-ROM

Администратор

Подписание манифеста приложения и манифеста развертывания

Да

Нет

Интерфейс пользователя во время установки

Единичный запрос

Многостраничный мастер установки

Установка сборок по требованию

Да

Нет

Установка файлов совместного использования

Нет

Да

Установка драйверов

Нет

Да (с настраиваемыми действиями по установке)

Установка в Global Assembly Cache

Нет

Да

Установка для множества пользователей

Нет

Да

Введение приложения в меню Start

Да

Да

Введение приложения в группу Startup

Нет

Да

Введение приложения в меню Favorites

Нет

Да

Регистрация типов файлов

Нет

Да

Доступ к реестру во время инсталляции3

Ограниченный

Да

Введение "заплат" в бинарные файлы

Нет

Да

Место инсталляции приложения

Кэш приложения ClickOnce

Каталог Program Files

 

Замечания

  1. При использовании Windows Installer вы должны встраивать возможность программного обновления в код приложения.
  2. При использовании ClickOnce откат доступен в Add/Remove Programs.
  3. Развертывание приложения ClickOnce может обращаться к улью реестра HKEY_LOCAL_MACHINE (HKLM) только при разрешении безопасности Full Trust (что соответствует инсталляции с CD-ROM).

 

 

 
15.11.2008
 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce
 
01.08  Task Context
01.08  XLSX в Mono