zoukankan      html  css  js  c++  java
  • 在Web安装工程中为虚拟目录指定不同的本地路径

    因工作学习需要,翻译了这篇文章,由于自己英文水平不限,仅供参考。如那位英语好的兄弟发现错误,希望给予指正,谢谢!

    原文名称:Specify a different location for Virtual Directories in Web Setup Projects

    原文地址:http://www.codeproject.com/KB/install/ChangeVDirWebSetupProject.aspx

    原文作者: Arnold E. Schrijver

    原作者简介:


    Arnold E. Schrijver

    Arnold Schrijver is a Development Manager for Adnovate (www.adnovate.com)
    Occupation: Web Developer
    Location: Netherlands Netherlands

    介绍

    当通过Visual Studio 2005的Web安装项目创建MSI[4]安装程序时,里面并没有创建的虚拟目录指定物理路径的方法。默认的是安装在网站根目录下的子文件夹(通常,主目录位置在'C:\Inetpub\wwwroot')。

    安装中地址对话框中唯一可供选择的是”网站”(*只能选择已创建过的网站,不能新建网站)及”虚拟目录”(*可新创建虚拟目录但不能指定虚拟目录的存储位置[1]):

    我决定通过加入为虚拟目录指定不同物理路径的选项来提高这个对话框的的功能。

    最简单办法是创建一个Visual Studio的安装工程通过创建一个用户自定义安装类去创建一个适当的位置给虚拟目录(通过安装程序的TARGETDIR)。最后,我将它添加到安装工程中自定义动作安装类里并编译它。

    但是,有两个原因使我决定在Web安装工程中执行功能替换

    1、我已花了很长时间来创建Web安装工程,不想从头来一次。

    2、我不想丢失对网站选择用的选项,或是执行原本定期的操作。

    这种操作不能通过使用Visual Studio进行实现。需要采用下面的步骤完成:

    • 通过Visual Studio 2005编辑Web安装工程产生MSI[4]。
    • 通过Orca.exe (位置在Microsoft Platform SDK中)扩展安装地址对话框。
    • 保存转换后的MSI[4]并替换原有MSI[4]程序

    编辑Visual Studio 中的Web安装工程很简单。通过下面两个步骤来详细说明。

    通过Orca.exe修改安装程序

    Orca.exe提供了一个用户图形界面使你可以直接编辑Windows安装的表集合。它是Microsoft Platform SDK for Windows 2003 Server R2中的一部分。首先,你需要安装SDK,然后通过运行SDK安装目录中的/Bin文件夹安装Orca.msi

    启动Orca.exe在编辑表集合前需要确认你 通过菜单勾选了'Tools > Options > Database'(工具)选项>数据库)里的'Copy embedded streams during 'Save As''(“另存为”时复制嵌入的流),如果你忘记了这一个,那么当你在运行修改后的MSI[4]时将会出现"Error 2356: Couldn't locate cabinet in stream"(Error 2356:无法指定压缩流)这样令人讨厌的错误。

    在Orca程序中,你需要在'Control'(控件)和'ControlEvent'(控件事件)表中添加一些行,并修改一些已有行。当修改完数据后需要将其保存为MSI Transform file。这样可以通过Visual Studio很容易的完成随后的再使用工作。

    首先从菜单中选择“Transform > New Transform'(转换>新建转换)”,记录我们的转换过程。现在,启动Control(控件)表进行修改。我们需要对名为'WebFolderForm'(Web文件夹窗体)的对话框进行修改,同时我们想给对话框增加一个标签和一个文本框,以及一个浏览文件的的按钮。通过在表中增加下面的三行可以实现上述功能(Ctrl+R *此快捷键完成在表中创建新行操作,也可以从菜单中的表—>添加行来进行新行的添加)。

    (注释:由于大小限制,我从列表中截取了两部分)

    唯一需要对已有列表中数据进行修改的是VDirEdit文本框这一行内的'Control Next'单元格,要将里面的数据从'Cancel' 修改为 'InstallLabel':

    这些变化将使安装地址对话框如下所示:

    此时浏览按钮还没有实现功能。为此,我们需修改ControlEvent(控件事件)表。在这个表中需要添加以下两行:

    在MSI数据库中已存在SelectFolderDialog(选择文件夹对话框)。上面两行是为了确保浏览按钮触发对话框及在选择文件夹位置后保存到TARGETDIR属性。以上就是所有的修改。现在,通过菜单中选择'Transform > Close Transform'(转换>关闭转换)将转换保存到硬盘中。Orca保存的文件扩展名为.mst,它可以在今后被Visual Studio创建的MSI[4]扩展包使用。

    它可以非常容易的应用转换到MSI[4]数据库中。仅需要通过Orca打开MSI,通过菜单中的'File > Save Transformed As...(保存转换为…)'.进行相应的转换操作.最后,通过'File > Save Transformed As... (保存>转换为…)',保存修改的MSI[4]。为了避免不必要的问题,通过对'Transform(转换)'菜单中的打开'Transform Properties...(转换属性)'勾选'Transform Properties...(转换属性)'中的三个复选框:'Same Language(相同语言)', 'Same Product Code(相同的产品代码)', and 'Same Upgrade Code(相同的升级代码)’是非常好的主意。

    额外步骤

    在MSI[4]表集合中的一些内容是在Visual Studio创建安装程序时产生的。为了使解决方案工作正常,在生成代码前需要做一些额外步骤,这样可能会使这些内容有些变化。

    Visual Studio可能会插入几个自定义动作,如通过点击“下一步”到了WebFolderForm(Web文件夹窗体)时,重置TARGETDIR属性到原有位置。基于这种原因,你可以在ControlEvent(控件事件)表中看到下面的行:

    WebFolderForm

    Next

    DoAction

    WEBCA_EvaluateURLsMB

    1

    1

    上面这一行的功能是当点击’Next’(下一步)时运行WEBCA_EvaluateURLsMB这个自定义动作,在'Ordering'(顺序)这一列中的SetTargetPath有比设置TARGETDIR更高的安装顺序号。光修改排序是不够的,还需要删除这三张表中的这些数据来解决这个问题(*ControlEvent 表,InstallExecuteSequence表,InstallExecuteSequence表),因为在InstallExecuteSequence表中,有一个名为WEBCA_EvaluateURLs的自定义动作,在InstallUISequence表中最终保存了WEBCA_EvaluateURLsNoFail的自定义动作。其它可能还需要删除的此类动作在CustomAction表中,可以通过匹配删除。

    我不确定在自定义动作中有那些功能,这是无法证明的。它们是由Visual Studio通过二进制数据流放到MSI[4]中的名称为MSVBDPCADLL(包含在 MSVBDPCA.DLL中)。我们可以看到在安装过程中删除他们并没有产生不良影响。

    指定默认安装路径

    移除自定义动作后,默认安装路径将不在初始化到你的Web服务器路径。这样通过增加几个额外行到MSI[4]中可以很容易的将路径安装到例如像[ProgramFilesFolder][Manufacturer]\[ProductName]这样的地址(这是安装工程默认地址[3])

    添加下面的行到自定义动作表:

    DIRCA_TARGETDIR

    307

    TARGETDIR

    [ProgramFilesFolder][Manufacturer]\[ProductName]

    下面这一行在安装执行顺序及安装用户界面顺序两个表中都有:

    DIRCA_TARGETDIR

    TARGETDIR=""

    749

    这一行的最后一列控制安装顺序,在顺序执行前产生WEBCA_TARGETVDIR动作

    l 说明:

    1. 标有*号的不是原文件翻译,是自己加的说明

    2. Orca.exe只包含在Windows 2003 Server R2版本中,而且只有英文版本(国内现在已有私人制作的汉化版本),所以相关菜单中英文翻译保留了原文有从汉化软件找到的相关翻译,以供比对。

    3. 微软Visual Studio中的安装程序分为两种

    Setup Project:安装项目(一般是为窗体程序准备的安装项目)

    Web SetUp Project (为网页项目准备的安装项目,加入IIS设置功能)

    4. MSI: Microsoft software Installer (微软软件安装程序)

    5. 原文中因为上传截图大小原因无法上传整图,自己在测试时抓图如下(图可放大看):

    image

  • 相关阅读:
    【西北师大-18软工】第三次作业成绩汇总
    【西北师大-18软工】第一次作业成绩汇总
    2017面向对象程序设计(Java)总结
    面向对象分析与设计中类的设计
    2017面向对象程序设计(Java)第十四周学习总结
    2017面向对象程序设计(Java)第十周学习总结
    2017面向对象程序设计(Java)第九周学习总结
    关于在eclipse中使用LocalDate类的问题
    JAVA程序导入eclipse的简易教程
    2017面向对象程序设计(Java)学习总结
  • 原文地址:https://www.cnblogs.com/forrestsun/p/1419499.html
Copyright © 2011-2022 走看看