Создание установочного пакета ASP.NET Setup Project в Microsoft Visual Studio 2005/2008
В этой статье рассмотрен процесс установки веб-приложений на сервер IIS. Она является переводом статьи Скотта Гатри «Tip/Trick: Creating Packaged ASP.NET Setup Programs with VS 2005». Процесс описан для Microsoft Visual Studio 2005, но ее также можно использовать без изменений в 2008 версии.
Статья была переведена пользователем Vadim.Stoyko.
Сценарий
Вы создали веб-приложение ASP.NET с помощью Visual Studio, и хотите, чтобы клиенты автоматически устанавливали и развертывали его на сервере с помощью простой программы установки.
В частности, вы хотите создать стандартную программу установки Windows, которая будет создавать и настраивать приложение на IIS, копировать все файлы приложения в соответствующие местоположения на сервере, а также обеспечить, чтобы среда ASP.NET 2.0 корректно работала для запуска приложения. Вы также хотите, чтобы программа установки спрашивала клиента ввести путь к базе данных, к которой будет обращаться приложение, а также, чтобы программа установки автоматически обновляла файл web.config с настройками строки подключения к базе данных, которую указал клиент.
Одно из решений - использовать встроенную возможность Visual Studio - Web Setup Project. Ниже шаг за шагом продемонстрируем, как создавать и использовать эту возможность.
Создание веб-приложения в Visual Studio
Прежде всего, мы создадим новый проект - ASP.NET веб-приложение (выберите File -> New Project -> ASP.NET Web Application). Для целей простоты наш проект будет содержать две страницы:
Добавим элемент Label на страницу default.aspx и обработчик события Page_Load в code-behind для вывода текущего времени на каждый запрос. Когда нажмем клавишу F5 для компиляции и запуска приложения, проект будет собран и запустится, как и ожидалось:
Включение Web Setup Project в проект
Теперь, когда простое ASP.NET приложение построено, добавим Web Setup Project в наш проект (выберите File -> Add -> New Project -> Setup and Deployment -> Web Setup Project):
Следующий шаг заключается в настройке Web Setup Project для скомпилированных сборок (содержимое каталога \bin) + содержимое разметки (.aspx, .config файлов и т.д.) с нашего веб-приложения и использовать их в нашем проекте установки. Для этого, щелкните правой кнопкой мыши на проекте установки веб-приложения в Solution Explorer и выберите пункт контекстного меню "Add -> Project Output":
В диалоге нужно выбрать, какой проект и какое содержимое проекта будет добавлено в установочный пакет:
Для проекта веб-приложения важно, что мы включаем в установочный пакет содержимое каталога \bin и содержимое разметки (.aspx, .config файлы) в рамках этого диалога.
По умолчанию, проект установки веб-приложения скопирует эти элементы в корневой каталог. Вы можете увидеть эти элементы, нажав правую кнопку мыши на корневой папке проекта установки и выбрав пункт контекстного меню View -> File System:
Далее необходимо перетащить “Primary Output from MyApplication” узел в папку \bin. После этого в левой части панели вы можете нажать на каталогу \bin и увидеть его содержимое:
Далее кликнув на “bin”вы увидите следующее:
Теперь у нас есть собранный и настроенный базовый проект установки нашего приложения. Следующим шагом будет его построение и запуск.
Построение и запуск проекта установки веб-приложения
Для создания веб-проекта установки можно щелкнуть правой кнопкой мыши на узле проекта установки в Solution Explorer и выбрать пункт меню "Build":
Если вы откроете окно результата построения проекта (View -> Output), вы увидите результаты:
Наш установочный проект создан в виде файла установки MyApplicationSetup.msi, который содержит содержимое нашего ASP.NET веб-приложения.
Протестируем процесс установки, для этого нажмём правой кнопкой мыши на узле проекта установки в Solution Explorer и выберем пункт меню "Install":
Это позволит запустить стандартный файл установки Windows-приложений и установить веб-приложения на IIS:
Вы можете дополнительно указать путь к виртуальному каталогу приложения (например: http://www.myserver.com/myapppath), или вы можете оставить это значение пустым, чтобы установить его в качестве корневого веб-приложения на сайте (например: http://www.myserver.com/).
После завершения установки, веб-приложение будет скопировано на диск, и зарегистрировано в IIS. Теперь мы можем запускать приложения, используя HTTP адрес, который мы предоставили в процессе установки:
После установки, приложение будет также отображаться в Панели управления Windows в категории "Установка и удаление программ":
Вы можете удалить установленное веб-приложение стандартным способом удаления приложений в Windows.
Изменение стандартных шагов установки веб-приложения
Программа установки создаст проект установки веб-приложения с инструкциями и баннерными изображениями по умолчанию.
Вы можете изменить и настроить экран установки, щелкнув правой кнопкой мыши на узле проекта установки в Solution Explorer и выбрав пункт контекстного меню "View->User Interface"):
В последствии откроется список диалоговых окон которые отображаются в процессе установки веб-приложения:
К сожалению, нет конструктора форм, который можно использовать для переопределения диалоговых экранов процесса установки. Однако вы можете использовать свойства каждого диалогового окна для изменения текста и баннерных изображений:
Вы также можете создать новые диалоги процесса установки и добавить их в проект установи веб-приложения. Позже в этом руководстве мы будем использовать эту возможность для создания пользовательского экрана для сбора данных о строке соединения к базе данных и использовать ее для автоматического конфигурирования файла Web.config, чтобы указать путь для соответствующей базы данных.
Добавление пользовательского действия в проект установки веб-приложения
Проект установки содержит встроенную поддержку по настройке и установке исполняющих общих действий. В их число входят редакторы для добавления / изменение реестра (View -> Register to configure), изменяя типа ассоциаций для файлов (View -> File Types), а также для проверки того, какие компоненты уже установлены. Проект установки также позволит вам настроить ряд общих параметров IIS (кликните на папке "Web Application Folder”):
В проект установки пользователь может добавить свой собственный код, который будет выполнятся в процессе установки или удаления приложения. Это называется «пользовательским действием (Custom Action)». продемонстрируем это. Добавим в проект установки новую библиотеку классов (File -> Add -> New Project -> Class Library):
using System; using System.Configuration.Install; using System.ComponentModel; namespace MyCustomAction { [RunInstaller(true)] public class ScottSetupAction : Installer { public override void Install(System.Collections.IDictionary stateSaver) { base.Install(stateSaver); // Todo: Write Your Custom Install Logic Here } } }
Далее нам необходимо убедиться, что эти Custom Action мы добавили к нашему проекту установки. Для этого, щелкните правой кнопкой мыши на главном узле проекта установки в Solution Explorer и выберите пункт меню View -> File System. Щелкните правой кнопкой мыши на папке \bin и выберите "Add -> Project Output", чтобы пользовательские действия были добавлены в проект установки:
Далее в диалоговом окне нам нужно выбрать из выпадающего меню класс который мы создали (MyCustomAction) и выбрать в списке Primary output:
Наконец, мы будем настраивать проект установки для вызова пользовательского действия во время установки веб-приложения. Для этого мы щелкаем правой кнопкой мыши на корневом узле проекта установки в Solution Explorer и выбираем пункт меню «View -> Custom Actions». В последствии появится редактор пользовательских действий. Щелкните правой кнопкой мыши на узле "Install" узел и выберите "Add Custom Action":
Далее мы должны выбрать из каталога \bin нашего веб-приложения какое пользовательское действие мы хотим импортировать в проект установки:
Проект установки автоматически определит пользовательские действия в связи с атрибутом "RunInstaller":
Наши пользовательские действия и инсталляционный метод теперь запустятся в любое время когда мы запустим программу установки нашего веб-приложения.
Пример использования пользовательских действий во время установки веб-проекта
В предыдущем разделе показано, как создать и настроить пустой класс пользовательских действий и метод установки. В частности, давайте добавим код для проверки того, или нужная версия ASP.NET для нашего веб-приложения установлена на машине.
Прежде всего, мы выберем обозреватель пользовательских действий (как и в предыдущем скриншоте - с помощью пункта меню View->Custom Action). Потом перейдем в панель свойства наших пользовательских действий и укажем несколько параметров, которые будут использовать созданные пользовательские действия во время выполнения:
В частности, мы будем проверять или путь к целевой директории нашего приложения прописан в настройках IIS, и или имя виртуального каталога совпадает с именем нашего сайта. Эта строка значений выглядит так:
/targetdir="[TARGETDIR]\"/targetvdir="[TARGETVDIR]"/targetsite="[TARGETSITE]"
Затем мы обновим наши пользовательские действия для доступа к этим значениям и сделаем с ними следующее:
using System; using System.Configuration; using System.Configuration.Install; using System.ComponentModel; using System.Diagnostics; using System.IO; namespace MyCustomAction { [RunInstaller(true)] public class ScottSetupAction : Installer { public override void Install(System.Collections.IDictionary stateSaver) { base.Install(stateSaver); // Retrieve configuration settings string targetSite = Context.Parameters["targetsite"]; string targetVDir = Context.Parameters["targetvdir"]; string targetDirectory = Context.Parameters["targetdir"]; if (targetSite == null) throw new InstallException("IIS Site Name Not Specified!"); if (targetSite.StartsWith("/LM/")) targetSite = targetSite.Substring(4); RegisterScriptMaps(targetSite, targetVDir); } void RegisterScriptMaps(string targetSite, string targetVDir) { // Calculate Windows path string sysRoot = System.Environment.GetEnvironmentVariable("SystemRoot"); // Launch aspnet_regiis.exe utility to configure mappings ProcessStartInfo info = new ProcessStartInfo(); info.FileName = Path.Combine(sysRoot, @"Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe"); info.Arguments = string.Format("-s {0}/ROOT/{1}", targetSite, targetVDir); info.CreateNoWindow = true; info.UseShellExecute = false; Process.Start(info); } } }
Приведенный выше код запускает утилиту aspnet_regiis.exe, которая поставляется с ASP.NET в директории «\ Windows \ Microsoft.net \ Framework \ v2.0.5.0727 \», и которая настраивает (регистрирует) IIS для ASP.NET.
Пример использования пользовательских действий: конфигурация строки соединения с базой данных
Давайте добавим некоторый графический интерфейс в проект установки, который позволит пользователю в процессе установки настраивать строку соединения с базой данных, которую будет использовать наше приложение.
Щелкните правой кнопкой мыши на проекте установки веб-приложения и откройте экран пользовательского интерфейса еще раз:
Щелкните правой кнопкой мыши на узле «Install» и добавьте новый диалог в мастер установки:
Выберите один из диалогов TextBox, в котором пользователь будет вводить строку соединения с базой данных:
Щелкните правой кнопкой мыши на узле и перетащите его выше на позицию после диалога ввода имени и адреса веб-приложения, которое мы устанавливаем.
Затем щелкните правой кнопкой мыши на только что созданном диалоговом окне и выберите свойства этого окна. В списке свойств вы можете изменять много параметров данного окна — текст, отображаемый на экране, а также контролировать , сколько полей для ввода текстовой информации будут видны в диалоге:
Запретим отображение текстовых полей под именами Edit2, Edit3, Edit4 TextBoxes. Теперь, когда мы построим и запустим наш проект установки, мы увидим такой диалог в процессе установки:
Когда пользователь ввел строку подключения к базе данных, мы должны убедиться, что значение строки подключения передалось в класс пользовательских действий. Вы можете сделать это, нажав правую кнопку мыши на узле проекта установки и выбрав пункт контекстного меню "View -> Custom Actions". После чего откроется окно свойств пользовательских действий:
Мы хотим обновить значения свойства «CustomActionData» для того чтобы приложение установки принимало строку подключения к базе данных, которую вводит пользователь. Укажем приложению установки, что считывать строку подключения к базе данных нужно из текстового поля «EDITA1»:
/TARGETDIR="[TARGETDIR]\"/DB="[EDITA1]"/targetvdir="[TARGETVDIR]"/ targetsite="[TARGETSITE]"
Теперь мы можем обновить наш класс пользовательских действий, для извлечения и использования значения строки подключения к базе данных, чтобы обновить файл «web.config», в котором будет находится новое значение строки подключения, которую ввел пользователь в процессе установки:
void ConfigureDatabase(string targetSite, string targetVDir, string connectionString) { // Retrieve "Friendly Site Name" from IIS for TargetSite DirectoryEntry entry = new DirectoryEntry("IIS://LocalHost/" + targetSite); string friendlySiteName = entry.Properties["ServerComment"].Value.ToString(); // Open Application's Web.Config Configuration config = WebConfigurationManager.OpenWebConfiguration("/" + targetVDir, friendlySiteName); // Add new connection string setting for web.config ConnectionStringSettings appDatabase = new ConnectionStringSettings(); appDatabase.Name = DATABASE_CONNECTION_KEY; appDatabase.ConnectionString = connectionString; config.ConnectionStrings.ConnectionStrings.Clear(); config.ConnectionStrings.ConnectionStrings.Add(appDatabase); // Persist web.config settings config.Save(); }
И теперь, после запуска программы установки нашего веб-приложения, в файл «web.config» будет заноситься значение строки подключения к базе данных, которую будет вводить пользователь в процессе установки.
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |