Wix为整个树生成单个组件id

Wix为整个树生成单个组件id,wix,guid,heat,Wix,Guid,Heat,我是一个对wix几乎没有经验的人,我正在努力为我负责的组件支持Windows。我正在尝试为我的产品生成的一组文件创建合并模块。这些文件存在于许多子目录中。我想知道如何为整个树中的所有文件创建一个组件ID。我不担心小升级,因为这是我不会做的事情。我试图避免为每个文件生成大量的guid 还有什么方法可以更改要安装文件的根目录的名称。目前,在我们的构建系统中,我想要安装的文件最终位于一个目录名“install”中。在heat生成的wxs文件中,它显示为install。我想知道我是否可以把它改成实际的产

我是一个对wix几乎没有经验的人,我正在努力为我负责的组件支持Windows。我正在尝试为我的产品生成的一组文件创建合并模块。这些文件存在于许多子目录中。我想知道如何为整个树中的所有文件创建一个组件ID。我不担心小升级,因为这是我不会做的事情。我试图避免为每个文件生成大量的guid

还有什么方法可以更改要安装文件的根目录的名称。目前,在我们的构建系统中,我想要安装的文件最终位于一个目录名“install”中。在heat生成的wxs文件中,它显示为install。我想知道我是否可以把它改成实际的产品名,而不是“安装”

  • 如果所有文件都指向同一个目标文件夹,则可以创建一个包含所有文件的文件夹。没有什么能阻止你那样做。然后,您可以只为该组件创建一个GUID。在实施之前,还请阅读这些答案,其中讨论了一个组件与多个组件的优缺点:。总结如下:
  • 您将无法进行小的升级/维修。如果组件是 在更新时,仅检查指定为密钥路径的文件,以查看是否 它已过时:如果它是最新的,则忽略所有其他内容

    如果要从每个文件中添加或删除文件,也会有困难 组成部分。一旦发布,组件是不可变的(就什么文件而言) 都在里面)。在不违反组件规则的情况下更新它的唯一方法是 以有效地删除和安装MSI的新版本。 了解组件规则是Windows Installer和一个文件的关键 每个组件使组件规则更易于使用,这就是为什么 这是这里很多人的推荐

  • 可以通过修改元素的“name”属性来更改根目录名

  • 每个组件使用一个文件-这避免了各种问题(跨越多个文件的.NET程序集除外)。请参见以下线程:

    Wix是创建安装程序的一个很好的框架,但它有一个陡峭的学习曲线。我强烈建议您阅读这本伟大的在线教程的几节内容

    如果您是一名“基于示例的修补者”,您可以在本文中找到一个更快、基于示例的教程:

    Wix是一种动手操作的工具。只需关注示例,并关注创建组件和主要升级设置:

    • (现代化、便捷的方式)
    • (传统方式-更灵活,更不方便)
    一旦你运行了它,其余的细节就可以通过阅读文档中你所需要的任何特性来确定了。将Visual Studio/Voctive与intellisense结合使用可确保您可以边走边学习快捷方式、ini文件、xml文件、对话框等功能

    另一个最重要的技巧是使用dark.exe(Wix工具包的一部分)来反编译现有的MSI文件。这将生成WIXXML,其中的代码可以复制并粘贴到您自己的Wix文件中。我使用其他MSI工具编译这样的MSI文件,然后将我需要的部分复制到我的Wix文件中——只是为了加快创建WIXXML的过程。研究反编译的XML非常有教育意义——它可以节省大量的时间


    更新,2021年5月:更多链接:


  • 谢谢你的回答。我想知道如何使用heat从命令行自动生成wxs文件。当前热处理是为每个文件创建一个组件。有什么工具可以用这种方式创建wxs文件吗。我有大量的文件,手动创建它们似乎不具有可伸缩性。阅读更多关于它的信息,我觉得使用多个组件比使用单个组件更好。阅读答案中的更新。我不会对此投反对票,但很抱歉,这不是一个好建议。如果您想为将来的更改和升级准备软件包,每个文件必须有一个组件。你永远不知道什么时候会需要这些。@glytzhkof你读了全部答案了吗,我已经指出了缺点。@Isaiah4110是的,这就是为什么我没有否决投票,但仍然不清楚单个组件对新手来说到底有多糟糕。你有没有尝试使用heat上的-dr标志来指定根目录?heat-help提供了许多可以使用的控件,如果这还不够,可以通过xsl转换传递输出?它们是免费的。但它们通常没有意义,这就是为什么在许多场景中,WiX会在构建时为您生成它们(
    candle
    ,而不是
    heat
    )。请参见
    heat-ag
    。“每个组件一个文件”的例外情况是每个.NET程序集一个组件。构成程序集的文件在功能上是不可分割的,只有一个有版本。是的,请注意这些特殊情况,但如果可以,请为每个组件创建一个文件。还有一些“文件替换技巧”,用于通过将未版本化的文件与版本化的文件放在一起来确保更新未版本化的文件。对于这些情况,最好使用配套文件。请参阅此链接: