Wix-如何复制目录以安装文件夹

我的项目中有一个包含许多文件的Bin文件夹。 目前,我只知道如何使用下面的代码添加特定文件来安装文件夹。

 

但是,我想将整个目录移动到安装路径。 例如,将整个文件夹“Bin”移动到安装路径“C:\ Myapplication”。

那我该怎么办?

提前致谢!

如何在wix安装程序中包含一个大型目录树

这看起来不错。 但是要做太多工作。

如何在wix中复制文件夹

以上链接工作正常。 但无法复制子文件夹。

所以我做的是,我创建了一个应用程序,它读取整个文件夹并获取其子目录和文件,并生成必要的代码块,如

     

然后我将生成的代码块添加到.wxs文件中。

您花在创建此应用上的初始时间并非浪费。 因为你可以永远使用它。 我建议您逐个文件复制,因为它在升级或修复期间很有用。 MSI为每个要复制的文件保留记录。 因此,它在升级和维修方面是可维护和有用的。

听起来像你想要使用的是WiX工具heat ,它用于“收获”一个目录(或单个文件)并创建一个可以在项目中使用的WiX片段文件。

例如,你有一个你想要收获的目录,它可能包含子目录,但是有很多文件,你想要它们……热量会为你做到这一点。

考虑一下这个简单的结构:

 Somedir | |---A file.txt |---An init file.ini |---another file.txt |---subfolder | |---a subfolder file.txt 

如果使用heat来获取此目录,该工具将为您生成片段文件,您可以将其用作项目中的组件参考,而无需一次指定一个文件或使用变通方法解决方案。

例如,以下heat命令将处理此目录(在此示例中从一个级别开始)

 heat dir somedir -o MyHarvestedStuff.wxs -scom -frag -srd -sreg -gg -cg MyComponentGroupId -dr BIN_DIR_REF 

哪里:

 dir = harvest a directory somedir = directory you want to harvest -o MyHarvestedStuff.wxs = the output fragment file -scom -sfrag -srd -sreg = Suppress COM elements, fragments, root directory as element, registry harvesting (these options will create a grouping that most applications can use) -gg = generate GUID's now (this will put the GUID's into your output file, rather than using a wildcard "*". The advantage here is you can use non-standard TARGETDIR, which would not qualify for autogenerated GUID's) -cg MyComponentGroupId = component group. this is what you will use in your feature set to include these files -dr BIN_DIR_REF = this is the directory reference for which to place the files in your final package. 

生成的XML看起来像这样(这是在没有-gg的情况下运行以避免发布真正的GUID)

                         

在您的项目文件中,您在根元素下有类似的内容:

    

在您的function组中:

  ...  ...  

将它们捆绑在一起……

  1. 将您的新片段文件与其他文件一起提供给candle
  2. 提供candle产生的.wixobj文件
  3. 使用WiX预处理器变量或使用-b选项解析新片段文件中的SourceDir引用

    例如: light ... -b "path to my directory that I harvested" ...

不要让答案的长度阻止你探索这个解决方案,它运作得很好而且非常简单。 现在如果你想从那个目录中排除任何东西,那就是另一个故事……