Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Все статьи »

Обсудить на форуме Обсудить на форуме

.NET - Проблема распространения приложений

Задача

Вопрос распространения (deploying) приложения требует к себе не менее серьезного внимания, чем проектирование и кодирование. Впечатление от приложения в целом складывается, в том числе, и из самого первого шага - инсталляции. В идеале, установка приложения должна требовать от пользователя лишь самого минимального участия. Можно сказать, что хорошая программа установки характеризуется следующими критериями (см. The Windows User Experience - Design Specifications and Guidelines - Integrating with the System - Installation):

  • Запуск программы установки происходит один раз
  • Программа установки имеет имя Setup.exe или Install.exe, и ее легко найти среди файлов установки
  • Если программа распространяется на CD, то вставка диска в привод приводит к автоматическому запуску установки
  • Весь процесс установки можно пройти, нажимая Enter. Это означает, что каждый шаг должен предполагать вариант по умолчанию.
  • Информация, показанная при установке, необходима и достаточна. Не полагайтесь на то, что пользователь будет читать README-файл. Сначала он запустит Setup.exe и обратится к документации лишь в случае, когда столкнется с серьезными проблемами при установке.
  • Одна программа установки работает на всех поддерживаемых приложением версиях операционной системы

Здесь мы будем рассматривать проблему применительно лишь к приложениям Windows Forms. К моему глубокому сожалению, данная статья не решает проблему в целом. Ее можно рассматривать как своего рода TODO - набор пунктов, которые нужно учитывать при подготовке инсталлера.

Что нужно установить

.NET Framework

Итак, что должно быть установлено? Как минимум, это .NET Framework и файлы вашего приложения, а также - компоненты, используемые вашим приложением.

ПРИМЕЧАНИЕ Что такое .NET Framework? Если вы еще не разобрались, то это (отбросив тонну рекламной шелухи) - набор библиотек, обеспечивающих среду функционирования управляемых (managed) приложений - common language runtime (CLR). Для тех, кто программирует на Java здесь можно провести аналогию с Java Runtime Environment (JRE).

Требование установки .NET Framework определяет список версий Windows, на которых будет работать ваше приложение (см. .NET Framework System Requirements и Microsoft .NET Framework: System Requirements for the .NET Framework 1.1):

  • Windows 98
  • Windows 98 Second Edition
  • Windows Millennium Edition
  • Windows NT 4.0 Workstation / Server with Service Pack 6.0a or later
  • Windows 2000 Professional / Server / Advanced Server
  • Windows XP Home / Professional
  • Windows .NET Server family (.NET Framework version 1.1 is installed as part of the operating system)

Для установки .NET Framework необходим Internet Explorer версии 5.01 или выше и Windows Installer 2.0 или выше. Поскольку IE 5.01 впервые появился в Windows 2000, то обновление браузера (если он еще не был обновлен), потребуется в Windows 98, 98 SE и NT 4.0. Требование к Windows Installer можно не учитывать, поскольку .NET Framework при установке производит обновление этого компонента.

ПРИМЕЧАНИЕ Если быть точным, то программа установки .NET Framework - dotnetfx.exe - проверяет, что IE имеет версию не ниже 5.0.2919.6307. Вы можете убедиться в этом, посмотрев в файл dotNetFx.log во временном каталоге Windows. Он содержит протокол установки файла dotnetfx.exe с описанием всех выполненных проверок. Способ определения версии IE приведен здесь: How to Determine Which Version of Internet Explorer Is Installed.

На момент написания данной статьи наиболее свежая версия .NET Framework - 1.1 Final Beta, и скоро (одновременно с выходом Windows 2003 Server) должен выйти release. Рекомендую вам использовать самую последнюю версию - я уже имел счастье столкнуться с некоторыми ошибками в версии 1.0.

В Visual Studio .NET довольно легко создать Setup Project и настроить его так, чтобы пакет установки включал в себя результат компиляции вашей программы. Этот процесс подробно описан в документации на Visual Studio .NET (см. напр. Walkthrough: Deploying a Windows Application).

Здесь нас поджидает первая сложность. Вы могли заметить, что в любом Setup Project, включающем программу на .NET, в список зависимостей автоматически включается файл Dotnetfxredist_x86_enu.msm, который по умолчанию отмечен как исключенный (excluded) из результирующего setup package. При сборке setup выдается сообщение:

WARNING: This setup does not contain the .NET Framework which must be installed
on the target machine by running dotnetfx.exe before this setup will install.
You can find dotnetfx.exe on the Visual Studio .NET 'Windows Components Update'
media. Dotnetfx.exe can be redistributed with your setup.

Если вы попробуете включить его, то получите сообщение об ошибке:

ERROR: dotNETFXRedist_x86_enu.msm must not be used to redistribute the .NET Framework.
Please exclude this merge module.

Вероятно, сначала предполагалась включать таким образом .NET Framework в состав инсталляций (например, в QA из MSDN Magazine 2001'09 так и говорится). Но сейчас этот merge module используется только с одной целью: он предотвращает от автоматического включения в проект некоторых DLL, входящих в CLR - например, MSCOREE.DLL.

Таким образом, сейчас .NET Framework не может быть объединен с инсталляцией вашей программы непосредственно - в одном .MSI-файле. Существует, однако, как минимум одно решение данной проблемы - Microsoft предлагает Sample Bootstrapper - программу запуска инсталляции, заменяющую стандартный Setup.exe (см. Microsoft .NET Framework Setup.exe Bootstrapper Sample и bootstrapper_sample.exe). Этот измененный загрузчик сначала запускает установку DOTNETFX.EXE (если это необходимо), а уже затем - установку .MSI-файла вашего приложения.

См. также: .NET Framework Deployment Guide, .NET Framework Support on Windows Operating Systems.

MDAC

Если ваше приложение использует доступ к базе данных (т.е. если оно пользуется System.Data namespace), потребуется установка Microsoft Data Access Components (MDAC) версии 2.6 или выше (при работе, классы System.Data проверяют что версия MDAC не ниже 2.6.6526). MDAC распространяется в виде файла установки MDAC_TYP.EXE. Здесь проблема та же что и с .NET Framework - как установить и MDAC, и приложение, используя один инсталлятор. По этому поводу имеется статья: FILE: Install DCOM and MDAC Through a Windows Installer Package. Вы также можете защитить свой инсталлятор от запуска в случае если MDAC не установлен: Adding a Launch Condition for Microsoft Data Access Components.

Несмотря на требование установки MDAC 2.6, рекомендуется ставить версию 2.7 - это та же версия, что ставится с Visual Studio .NET, а значит, именно на ней вы разрабатываете и тестируете ваше приложение. Кроме того, нет смысла ставить MDAC версии ниже 2.7 на Windows 2000 и Windows XP.

Jet

Добавлю еще пару слов о Jet Driver (он используется для доступа к базам MS Access, расширение файла - MDB). В настоящее время Jet Driver уже считается "legacy software" - на смену ему предлагается использовать MSDE. Начиная с MDAC версии 2.6, Jet Driver не входит в состав этого дистрибутива, и его требуется устанавливать отдельно: INFO: MDAC Version 2.6 and Later Do Not Contain Jet or Desktop ODBC Drivers.

На download.microsoft.com имеется Jet 4.0 SP3 сразу для всех версий Windows - Jet 4.0 Service Pack 3 Update (Jet40SP3_Comp.exe) и четыре варианта Jet 4.0 SP6 - для разных версий Windows - ACC2002: Updated Version of Microsoft Jet 4.0 Available in Download Center.

Crystal Reports

Для работы отчетов Crystal Reports (CR) на машине клиента должен быть установлен Crystal Reports Free Runtime - набор библиотек и лицензия. В проект инсталляции нужно добавить файлы, содержащие эти библиотеки (см. Distributing Crystal Runtime Files to a Client Computer):

  • managed.msm
  • database_access.msm
  • database_access_enu.msm
  • regwiz.msm

Если ваши отчеты используют ADO.NET datasets, то помимо этого требуется подключить VC_CRT.msm и VC_STL.msm - настройте их на установку в системный каталог Windows.

Для корректной установки лицензии нужно прописать номер лицензии в свойствах regwiz.msm (в свойствах: Merge module properties - License Key). Номер лицензии можно узнать в окне About среды Visual Studio .NET. Очень рекомендую внимательно прочитать документ Crystal Reports for Visual Studio .NET Application Deployment - это поможет избежать многих проблем (ищите его под именем crnet_deployment.pdf на http://support.crystaldecisions.com/docs/).

Наконец, чтобы исправились некоторые ошибки CR (например, проблемы с экспортом в PDF), рекомендую установить (и у себя, и на машине клиенте) пакет актуальных обновлений - Crystal Reports for Visual Studio .NET Monthly Hot Fix (English). Этот пакет обновляется ежемесячно. При установке он обновляет только файлы CR Free Runtime, не обновляя MSM-файлы. К сожалению, мне неизвестен способ, который позволил бы включить файлы этого пакета обновлений в merge modules.

И еще один момент, связанный с Crystal Reports. Если на машине клиента стоит Windows 98/Me и Internet Explorer версии меньше чем 6.0, то после инсталляции могут возникнуть проблемы с созданием отчетов. Дело здесь в ATL.dll. При инсталляции некоторые из библиотек CR саморегистрируется, что требует их загрузки. Одна из этих библиотек (CRQE.dll) связана с ATL.dll и требует версию 3.0.8849 этой библиотеки (которая устанавливается с IE6). При отсутствии нужной версии ATL.dll, регистрация не проходит и соответствующие COM-объекты оказываются недоступны. Таким образом, рекомендуется включить ATL.msm в состав инсталлятора (подробнее см. Err Msg: "Load Report Failed" after deploying .NET app to Windows 98 / ME).

В целом

Предположим, что наше приложение написано на Windows Forms, работает с базой данных MS Access и использует Crystal Reports для создания и печати отчетов. Посмотрим, что нам потребуется установить (по максимуму):

Internet Explorer 5.01    
.NET Framework 23Mb dotnetfx.exe
MDAC 5Mb mdac_typ.exe
Jet Driver 4Mb jet40sp3_comp.exe
Crystal Reports Free Run-Time 7Mb merge modules
Crystal Reports for VS.NET Hot-Fix 8Mb cr10netwin_en_200303.exe
Ваше приложение    
Другие компоненты, используемые вашим приложением    

Итого - 47Mb плюс само приложение. Это определенно много для того чтобы скачать это через Интернет по модемной линии. Но при этом такого объема даже мало для программы, распространяемой на CD.

Для распространения через Интернет можно порекомендовать включить в пакет установки только самое необходимое - само приложение и CR Free Runtime. На странице, откуда скачивается программа, подробно описать - что должно быть установлено для нормальной работы и откуда можно скачать недостающие компоненты. Первой же ссылкой должен быть адрес для загрузки последней версии .NET Framework.

При распространении на CD лучше включить все что в принципе может понадобиться - различные версии IE, отдельный компонент для обновления Windows Installer, обновление Jet до версии 4.0 SP6 и т.п. Не забудьте также написать autorun.inf для автоматического запуска инсталляции.

Итак, я здесь так и не показал решения основной проблемы - как создать пакет инсталляции, устанавливающий все нужные компоненты одним запуском setup.exe. Конечно, решение будет сильно зависеть от средств, которые вы будете использовать для создания инсталлятора. Но думаю, что я, по крайней мере, поставил эту проблему. А хорошо поставленная проблема - это уже половина решения ;-)


Может пригодится:


Автор: Никита Зимин
Прочитано: 3699
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру