Создание установочного пакета ASP.NET Setup Project в Microsoft Visual Studio 2005/2008

понедельник, 20 июля 2009, Александр Краковецкий

В этой статье рассмотрен процесс установки веб-приложений на сервер 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 Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии