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

#c# #iis #application-pool #web-setup-project

#c# #iis #пул приложений #web-setup-project

Вопрос:

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

http://weblogs.asp.net/scottgu/tip-trick-creating-packaged-asp-net-setup-programs-with-vs-2005
http://msdn.microsoft.com/en-us/library/ms525598.aspx
http://www.dreamincode.net/forums/topic/231074-setup-and-deployment-in-visual-studio-2010/
http://www.codeproject.com/Articles/146626/Extending-Visual-Studio-Setup-Project

Однако, похоже, не так много о том, как конкретно изменить пользовательский интерфейс, чтобы пользователь мог создать новый сайт, а не выбирать из выпадающего списка, предоставленного в действии «Адрес установки» (в разделе «Пуск»). В дополнение к этому я наткнулся на код в разделе «Как создать новый пул приложений», но не на «как запретить пользовательскому интерфейсу предоставлять пользователю возможность сначала выбрать 1 из списка».

На данный момент мой установщик выглядит следующим образом:

Пользовательский интерфейс - шаг адреса установки

Как вы можете видеть, у пользователя в настоящее время есть 3 поля; Сайт, виртуальный каталог и пул приложений. Сайт и пул приложений — это списки с существующими параметрами в них. В случае выпадающего списка Site я на самом деле хочу, чтобы это было текстовое поле, которое позволяет пользователю вводить название веб-сайта, который они хотят создать. Для пула приложений я хочу, чтобы это полностью исчезло, поскольку мое пользовательское действие автоматически создаст пул приложений и назначит ему виртуальный каталог (надеюсь).

У меня уже есть код (еще не протестированный) для создания пула приложений, виртуального каталога и назначения его пулу приложений, но я не вижу, как отредактировать пользовательский интерфейс для своих нужд. Нужно ли мне удалить шаг «Адрес установки» и создать свой собственный?

Приведенный ниже код для создания пула приложений, создания виртуального каталога и назначения виртуального каталога пулу приложений:

 //Properties for user input
private string targetSite { get { return this.Context.Parameters["targetsite"]; }}
private string targetVirtualDir { get { return this.Context.Parameters["targetvdir"]; } }
private string targetDirectory { get { return this.Context.Parameters["targetdir"]; } }
private const string ApplicationPool = "TestWebAppAP";
private const string BasePath = "IIS://Localhost/W3SVC/1/Root";
private const string AppPoolsAddress = "IIS://Localhost/W3SVC/AppPools";

//Install
public override void Install(System.Collections.IDictionary stateSaver)
{
    base.Install(stateSaver);

    if (targetSite == null) throw new InstallException("IIS site name not specified");
    else
    {
        CreateApplicationPool();
        CreateVirtualDir();
        AssignVDirtoAppPool();
    }
}

//Create Application Pool
private void CreateApplicationPool()
{
    try
    {
        DirectoryEntry NewPool;
        DirectoryEntry AppPools = new DirectoryEntry(AppPoolsAddress);
        NewPool = AppPools.Children.Add(ApplicationPool, "IIsApplicationPool");
        NewPool.CommitChanges();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Failed to create new application pool " "   ApplicationPool   "". Error: "   ex.Message);
        throw new InstallException("Failed to create app pool", ex);
    }
}

//Create Virtual Directory
private void CreateVirtualDir()
{
    try
    {
        DirectoryEntry site = new DirectoryEntry(BasePath);
        string className = site.SchemaClassName.ToString();

        if (className.EndsWith("Server") || className.EndsWith("VirtualDir"))
        {
            DirectoryEntries vdirs = site.Children;
            DirectoryEntry newVDir = vdirs.Add(targetVirtualDir, (className.Replace("Service", "VirtualDir")));
            newVDir.Properties["Path"][0] = targetDirectory;
            newVDir.Properties["AccessScript"][0] = true;
            newVDir.Properties["AppFriendlyName"][0] = targetVirtualDir;
            newVDir.Properties["AppIsolated"][0] = "1";
            newVDir.Properties["AppRoot"][0] = "/LM"   BasePath.Substring(BasePath.IndexOf("/", ("IIS://".Length)));

            newVDir.CommitChanges();
        }
        else
        {
            MessageBox.Show("Failed to create virtual directory. It can only be created in a site or virtual directory node.");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Failed to create virtual directory ""   targetVirtualDir   "". Error: "   ex.Message);
        throw new InstallException("Failed to create virtual directory", ex);
    }
}

//Assign virtual directory to app pool
private void AssignVDirtoAppPool()
{
    try
    {
        DirectoryEntry vDir = new DirectoryEntry(BasePath);
        string className = vDir.SchemaClassName.ToString();

        if(className.EndsWith("VirtualDir"))
        {
            object[] param = { 0, ApplicationPool, true };
            vDir.Invoke("AppCreate3", param);
            vDir.Properties["AppIsolated"][0] = "2";
        }
        else
        {
            MessageBox.Show("Failed to assign to application pool. Only virtual directories can be assigned to application pools.");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Failed to assign virtual directory ""   targetVirtualDir   "" to application pool ""   ApplicationPool   "". Error: "   ex.Message);
        throw new InstallException("Failed to assign virtual directory to application pool", ex);
    }
}
  

Ответ №1:

Я обнаружил, что могу просто удалить «Адрес установки» в пользовательском интерфейсе и создать пользовательский с текстовыми полями. Это кажется немного ограничительным, но это единственный способ, которым я мог это сделать.

Комментарии:

1. Я создал веб-настройку, чтобы развернуть свой веб-сайт в IIS, но, как ни странно, выпадающие списки «Сайт» и «Пул приложений» не отображаются в установщике. Они есть по умолчанию или нам нужно сделать что-то особенное, чтобы эти выпадающие списки отображались в мастере установки?

2. @user2913184 Если их там нет, вам придется создать пользовательский.

3. На самом деле это в значительной степени то, что я подумал, хотя спасибо за вашу помощь.