Web安装项目中的虚拟目录

时间:2009-04-03 14:59:36

标签: windows-installer web-setup-project

我有一个Web设置项目,默认情况下会在文本框安装程序屏幕中显示虚拟目录。我希望用户无法编辑虚拟目录名称,并且始终默认为我在msi中设置的名称。如何实现这一目标?

8 个答案:

答案 0 :(得分:33)

如果您不希望用户更改虚拟目录,只需从用户界面中删除“安装地址”对话框。

  1. 右键单击安装程序项目和 选择“用户界面”。
  2. 展开“开始”节点。
  3. 右键点击“安装地址”。
  4. 选择“删除”
  5. 如果您想要通常由安装地址对话框选择的网站,虚拟目录,应用程序池的不同参数,您可以使用其他人描述的自定义操作覆盖这些参数。

    但是,根据我的经验,自定义操作无法帮助设置用户可以更改的默认值,因为他们执行 After 要求用户输入的对话框。

    设置用户可以在对话框中根据需要覆盖的默认值的最简单方法是执行以下操作。

    1. 删除欢迎页面。
    2. 添加文本框对话框(例如“文本框(A)”)
    3. 将所有文本框的可见属性更改为false,以便不显示任何文本框。
    4. 更改BannerBitmap和BodyText属性,使其看起来有点像欢迎 页。
    5. 在“编辑***< n> 属性”中设置要覆盖的必要属性 并在“编辑 < n> ***值”中设置默认值。
    6. 最有用的属性(恕我直言)是。

      TARGETDIR - 要复制文件的位置 TARGETVDIR - 要在指定站点中创建的虚拟目录 TARGETAPPPOOL - 要使用的应用程序池(注意:这必须存在,不会创建)
      TARGETSITE - 要创建虚拟目录的网站(注意:这是网站的 配置数据库值 ...例如:“/ LM / W3svc / 2“。另请注意,该网站必须存在。)

      可以找到安装程序的完整属性列表here

      如果您真的想要更好地控制IIS设置,我建议您将项目更改为标准的Windows Installer项目并创建自定义安装操作,以便您可以以编程方式创建AppPools。开始理解以编程方式创建这些内容的好地方是here

      这样做的最大原因是自定义操作在 提示后运行 但是必须在 之前创建应用程序池和网站< / em> 安装程序可以提示。

答案 1 :(得分:3)

理论上听起来不错,但据我所知,它不起作用,至少不适用于设置AppPool。在我的vs2008 Web设置项目中,我有一个自定义操作来设置apppool(在使用VS2005构建安装程序时可以正常工作)。

DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir));
IISVdir.Properties["AppPoolId"].Value = appPool;
IISVdir.CommitChanges();

安装程序没有对话框运行(删除了安装地址UI节点),但虚拟目录上设置的AppPool最终成为DefaultAppPool。

我的帮助器类中的其他自定义操作确实可以运行并运行。

所以必须有其他一些神奇的咒语。

感谢。

答案 2 :(得分:2)

使用Context.Parameters

获取虚拟目录
  1. 添加自定义操作以安装节点(如果您想知道如何添加自定义操作,请使用此url
  2. 右键单击自定义操作,然后选择属性窗口。
  3. 对于CustomActionsData属性set / targetvdir =“[TARGETVDIR]”。
  4. 现在在您的安装程序类中,您可以通过Context.Parameters [“targetvdir”]获取虚拟目录名称。 希望这能帮到你:)。

答案 3 :(得分:1)

切换到Wix并使用他们的Web Extensions

答案 4 :(得分:1)

选择您的设置项目,查看&gt;编辑&gt;用户界面,选择“安装地址”对话框,然后将其删除。

编辑:

正如Shay所指出的,用户可以从命令行覆盖默认安装位置。要覆盖它,您应该在InstallExecuteSequence中设置TARGETDIR属性。不幸的是,您无法从Visual Studio更改此序列,您必须使用Orca:

  1. 构建安装项目。
  2. 从Orca打开MSI文件。
  3. 使用Source“TARGETDIR”(不带引号),目标文件夹的Target以及Action的唯一名称创建类型51(set属性)的新自定义操作(约定是使用带有初始下划线的GUID)。
  4. 在InstallExecuteSequence中创建一个新行,其中包含Action的唯一名称,条件的“未安装”,以及使用TARGETDIR之前的序列号(750是我制作的样本中的第一个使用,因此我使用了序列555)。

答案 5 :(得分:1)

Org不允许使用开源或GPL开源。

解决方案: *编辑自定义操作(右键单击&gt;查看&gt;自定义操作)以修复虚拟目录和路径 更改customactiondata:

/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]" 

致:

  /targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="FIXED_NAME" /targetsite="[TARGETSITE]" 

您可能只是从用户界面中删除了安装地址,并设置了将信息传递给自定义安装的组件

  • 使用msbuildtasks
  • 在msbuild上编写一个包装器

答案 6 :(得分:1)

Lo-tech解决方案:在notepad ++中编辑vdproj文件以设置虚拟目录并从用户界面编辑器中删除“安装地址”对话框。

答案 7 :(得分:0)

在VS中对我来说

  1. 右键单击安装项目

  2. 查看->文件系统

  3. Web应用程序文件夹(在左窗格中)

  4. 在属性窗口(在右侧,底部)

  5. 虚拟目录(最后一个)

    您可以在此处更改/设置IIS上的默认路径,即可以安装的目标目录。