65.9K
CodeProject 正在变化。 阅读更多。
Home

允许用户在 Web 项目部署期间设置物理目录路径

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (7投票s)

2006年11月16日

3分钟阅读

viewsIcon

84697

downloadIcon

629

如何将 Web 应用程序部署到用户定义的物理目录。

引言

我们希望用户在部署期间为我们的 Web 应用程序 IIS 虚拟目录设置物理路径。由于 Web 安装项目不允许这样做,我们的想法是使用应用程序安装项目创建物理路径和内容,然后使用自定义操作,使用 IIS 管理对象创建虚拟目录。

背景

在之前发表的一篇文章中,我们讨论了如何设置 IIS 虚拟目录身份验证设置。如果您也想更改此设置,请查看这篇文章

使用代码

首先创建一个新的 Web 应用程序项目,也许您已经有一个要部署的项目。创建一个新的 Web 窗体并将其命名为Default.aspx

现在,创建一个名为CustomAction的新 Visual Basic 类库。删除Class1.vb。向项目添加一个基于Installer Class模板的新类,命名为CustomAction.vb。(右键单击“添加”->“添加类...”,从模板中选择Installer Class)。打开它并切换到代码视图。

Add

Imports System.IO

CustomAction.vb类的 Imports 部分。

现在为安装程序类添加以下方法重写

这是在 Setup Deployment Project 安装程序预定义内容之后调用的方法。它在默认 IIS 服务器中创建新的虚拟目录,将其物理路径设置为应用程序文件夹,将 Web 应用程序创建为 In Process,并设置默认文档页面。它还展示了如何保存安装程序状态以便在卸载期间读取

Public Overrides Sub Install(ByVal stateSaver As _
                     System.Collections.IDictionary)
    ' Execute inherited Install
    MyBase.Install(stateSaver)

    ' Get Assembly
    Dim Asm As System.Reflection.Assembly = _
        System.Reflection.Assembly.GetExecutingAssembly

    Dim DirLocation As String = Path.GetDirectoryName(Asm.Location)

    REM *******************************************************
    REM Create IIS Virtual Dir 

    ' TODO: Search for the Server Number <-------¬
    Dim vRoot = GetObject("IIS:///W3svc/1/Root")

    ' Create de Virtual Dir
    Dim vDir = vRoot.Create("IIsWebVirtualDir", _
               Me.Context.Parameters.Item("dir"))

    ' Set the Physical Path for the virtual Dir
    vDir.Path = DirLocation

    ' Set the default Doc
    vDir.DefaultDoc = "Default.aspx"

    ' Actually set Info
    vDir.SetInfo()

    'Create an application in-process. 
    vDir.AppCreate(True)

    ' Save the Virtual Dir
    stateSaver.Add("VirtualDir", _
                   Me.Context.Parameters.Item("dir"))

End Sub

这是在 Setup Deployment Project 卸载程序预定义内容之后调用的方法。它获取保存在安装程序状态中的VirtualDir键值,并使用它在卸载期间从 IIS 中删除虚拟目录

' Override 'Uninstall' method of Installer class.
Public Overrides Sub Uninstall(ByVal mySavedState As IDictionary)
    MyBase.Uninstall(mySavedState)
    Try
        ' Get virtual dir
        Dim vRoot = GetObject("IIS:///W3svc/1/Root")

        ' Delete Virtual Dir
        vRoot.Delete("IIsWebVirtualDir", mySavedState("VirtualDir"))

    Catch ex As Exception

    End Try
End Sub 'Uninstall

这是在执行所有安装部署步骤后调用的方法,它在 Internet Explorer 中打开 Web 应用程序默认页面

' Override the 'Commit' method of the Installer class.
Public Overrides Sub Commit(ByVal mySavedState As IDictionary)
    MyBase.Commit(mySavedState)
    Try
    ' Open the virtual dir after install
        Dim P As New Process
        P.Start("iexplore.exe", "https:///" & _
                Me.Context.Parameters.Item("dir") & "/")
    Catch ex As Exception

    End Try
End Sub 'Commit

保存CustomAction.vb。现在,将“Web To Install”安装项目添加到解决方案。(请注意,我们使用 Application Setup Project,而不是 Web Setup Project,来进行此部署。)

将 WebToIstall 项目的主要输出和内容文件添加到安装项目输出。(右键单击 -> 添加 -> 项目输出...)

重复该操作以添加 CustomAction 项目的主要输出。

将 CustomActions 自定义操作添加到安装项目

  • 安装:右键单击 -> 查看 -> 自定义操作。在“自定义操作”视图中,右键单击“安装”->“添加自定义操作”。双击“应用程序文件夹”。选择 CustomAction Primary Output。单击“确定”。右键单击新的自定义操作 ->“属性”窗口。将CustomActionData属性设置为“/dir=[VIRTDIR]”(不带“”)。
  • 提交:右键单击 -> 查看 -> 自定义操作。在“自定义操作”视图中,右键单击“提交”->“添加自定义操作”。双击“应用程序文件夹”。选择 CustomAction Primary Output。单击“确定”。右键单击新的自定义操作 ->“属性”窗口。将CustomActionData属性设置为“/dir=[VIRTDIR]”(不带“”)。
  • 卸载:右键单击 -> 查看 -> 自定义操作。在“自定义操作”视图中,右键单击“卸载”->“添加自定义操作”。双击“应用程序文件夹”。选择 CustomAction Primary Output。单击“确定”。

现在,添加虚拟目录输入文本框界面

在解决方案资源管理器中,右键单击“安装项目”->“查看”->“用户界面”。右键单击“安装开始”部分 ->“添加对话框”。选择“文本框 (A)”,单击“确定”。将新对话框拖动到“欢迎”对话框之前。右键单击新对话框 ->“属性”窗口。设置以下属性(不带“”):将BannerText设置为“虚拟目录名称”,将BodyText设置为“指定虚拟目录名称”,将Edit1Label设置为“虚拟目录:”,将Edit1Property设置为“VIRTDIR”,将Edit1Value设置为“WebToInstall”,或指定您的预定义虚拟目录名称。将Edit2VisibleEdit3VisibleEdit4Visible设置为“False”。

关注点

就这样!此代码还展示了如何使用安装程序状态来跟踪安装程序数据。有时当我们遇到困难时,试图只用一种方式做事,而实际上存在一种更简单的方式,如果我们换个角度看问题就可以发现。

历史

  • 2006 年 11 月 16 日 - 初始版本。
© . All rights reserved.