Windows installer Web安装项目中的虚拟目录

Windows installer Web安装项目中的虚拟目录,windows-installer,web-setup-project,Windows Installer,Web Setup Project,我有一个web安装项目,默认情况下在textbox安装程序屏幕中显示虚拟目录。我希望用户不能编辑虚拟目录名,并始终默认为我在msi中设置的名称。如何实现这一点?切换到并使用它们的选择您的安装项目,查看>编辑器>用户界面,选择安装地址对话框,然后删除它们 编辑: 正如Shay指出的,用户可以从命令行覆盖默认安装位置。要覆盖此设置,应在InstallExecuteSequence中设置TARGETDIR属性。很遗憾,您无法从Visual Studio更改此序列,您必须使用Orca: 构建安装项目 从

我有一个web安装项目,默认情况下在textbox安装程序屏幕中显示虚拟目录。我希望用户不能编辑虚拟目录名,并始终默认为我在msi中设置的名称。如何实现这一点?

切换到并使用它们的

选择您的安装项目,查看>编辑器>用户界面,选择安装地址对话框,然后删除它们

编辑:

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

  • 构建安装项目
  • 从Orca打开MSI文件
  • 使用源“TARGETDIR”(不带引号)、目标文件夹的目标和操作的唯一名称(约定使用带有初始下划线的GUID),创建类型为51(set属性)的新自定义操作
  • 在InstallExecuteSequence中创建一个新行,其中包含操作的唯一名称,条件的“NOT Installed”,以及使用TARGETDIR之前的序列号(750是我制作的示例中第一次使用的,因此我使用了555的序列)

  • Org不允许开源或GPL开源

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

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

    您可以只从用户界面中删除安装地址,然后安装一个将信息传递给自定义安装的组件

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

    以便使用Context.Parameters获取虚拟目录

  • 向安装节点添加自定义操作(如果您想知道如何添加自定义操作,请使用此选项)
  • 在自定义操作上单击鼠标右键,然后选择“属性”窗口
  • 对于CustomActionsData属性集/targetvdir=“[targetvdir]”
  • 现在,在installer类中,您可以通过Context.Parameters[“targetvdir”]获取虚拟目录名称。 希望这对你有帮助:)

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

  • 右键单击installer project,然后单击 选择“用户界面”
  • 展开“开始”节点
  • 右键单击“安装地址”
  • 选择“删除”
  • 如果您希望网站、虚拟目录、应用程序池(通常由“安装地址”对话框选择)具有不同的参数,则可以使用其他人所述的自定义操作覆盖这些参数

    但是,根据我的经验,自定义操作无助于设置用户可以更改的默认值,因为它们在请求用户输入的对话框之后执行

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

  • 删除欢迎页面
  • 添加文本框对话框(例如“文本框(a)”)
  • 将所有文本框的可见属性更改为false,以便不显示任何文本框
  • 更改BannerBitmap和BodyText属性,使其看起来有点像欢迎 页面
  • 在“编辑***属性”中设置要覆盖的必要属性 并在“编辑值”中设置默认值
  • 最有用的属性(IMHO)是

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

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

    如果您确实希望更好地控制IIS安装,我建议您将项目更改为标准的Windows Installer项目,并创建自定义安装操作,以便您可以通过编程方式创建应用程序池。一个开始理解编程创建这些东西的好地方是


    采用这种方式的最大原因是自定义操作在提示后运行,但必须在安装程序提示前创建应用程序池和网站。

    理论上听起来不错,但正如我所知,不起作用,至少在设置应用程序池时不起作用。我有一个自定义操作来在我的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

    我的助手类中的其他自定义操作确实可以运行和工作

    所以肯定还需要一些其他的魔法咒语


    谢谢。

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

    适用于VS中的我

  • 右键单击安装项目

  • 查看->文件系统

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

  • 在属性窗口中(右侧,底部)

  • 虚拟目录(最后一个)

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


  • 此外,如果无法实现这一点,那么如何使用Context.Parameters[]获取更改的虚拟目录的值?我正在查看websetup项目,因为我对开源不感兴趣,因为org不允许它。Wix是由Microsoft编写和维护的,它应该是Visual Studio 10的一部分。许多发起者(包括Office 2007设置)使用Wix时没有任何问题。dele
    DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir));
    IISVdir.Properties["AppPoolId"].Value = appPool;
    IISVdir.CommitChanges();