在自动收集WIX安装程序的文件时,我的目录结构有多灵活?

时间:2011-12-21 19:40:49

标签: visual-studio-2010 wix

原谅我的无知 - 我一直在做一些阅读,但尚未准备好尝试任何事情。

目前,我们有一个无法轻松维护的.wxs文件。每当从SVN中删除/删除新文件时,都会手动添加/删除所有文件。由于在创建新文件和更新.wxs安装文件之间丢弃了球,我们经常破坏安装版本。

因此,我想自动收集解决方案中的文件。 HOW TO CONSUME MSDEPLOY STAGED WEB SITE OUTPUT IN A WIX INSTALLER似乎概述了我想要做的事情,但它并没有解决我的一个主要问题。那就是 - 像这样的收获文件是否允许自定义目录结构,或者安装程序现在是否会在模仿我们解决方案的位置安装文件?

我正在努力实现“#34;自动检测新文件和文件夹”的逻辑飞跃。 to"知道自动放置新文件的位置。"有没有办法设置一些预先定义的操作,例如"此父文件夹下的所有文件和文件夹应安装到[其他已定义的目录]"

感谢。

1 个答案:

答案 0 :(得分:4)

我在ASP.net上使用WiX,动态地包含在安装过程中运行的所有网站文件和数据库脚本。

我使用像这样的加热任务从解决方案中提取文件

  <HeatDirectory
                  ToolPath="$(WixToolPath)"
                  Directory="$(WebRoot)"
                  GenerateGuidsNow="yes"
                  ComponentGroupName="MasterPlanWeb"
                  OutputFile="$(MSBuildProjectDirectory)\Setup\Product\Fragments\wwwfiles.wxs"
                  SuppressFragments="yes"
                  DirectoryRefId="WEBROOT"
                  KeepEmptyDirectories="yes"
                  PreprocessorVariable="var.WebRoot"
                  SuppressRegistry="yes"
                  SuppressRootDirectory="yes"
                  SuppressCom="yes" />

然后在我的主wix脚本中,那些被引用为

  <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="INSTALLLOCATION" Name="MasterPlan">
        <Directory Id="WEBROOT" Name="wwwroot" />
        <Directory Id="DATABASESRC" Name="databasesrc" />
      </Directory>
    </Directory>

如果第一个xml块中的DirectoryRefId和第​​二个部分中的Directory Id,这两个部分之间的链接。

所以基本上直接在我的HEATed目录下的解决方案结构被复制,但是我能够更改根目录。

例如,如果我在c:\ mywebsite上运行HEAT并且该目录包含

  • \ people \
  • \占\
  • \脚本\

将包含这些子目录。

第二部分允许我在安装期间设置根目录,因此如果用户选择c:\ test,则将创建安装到以下目录的目录(带有加热内容)

  • C:\测试\人\
  • C:\测试\占\
  • C:\测试\脚本\

如果您真的希望子目录将所有数据放在根目录下,那么您可以对每个文件夹执行循环并运行相同的命令为它们指定相同的DirectoryRefId。