我可以将自动生成的GUID与合并模块一起使用吗?

时间:2015-12-22 21:02:24

标签: wix windows-installer wix3.7 merge-module

我在<Product>中使用了自动提示,但无法弄清楚如何将其与<Module>一起使用。我只收到这个错误:

  

组件X有一个带有路径&#39; TARGETDIR \ company ...&#39;的密钥文件。   由于此路径未植根于其中一个标准目录(例如   ProgramFiles Folder),该组件不符合标准   拥有自动生成的guid。

以上,company是映射到!(loc.ProductManufacturerFolderName)的值。

唯一的问题是不正确。我的目录根植于ProgramFiles,就像我的产品一样,我的产品工作正常:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFiles64Folder">
        <Directory Id="MODULEINSTALLLOCATION" Name="!(loc.ProductManufacturerFolderName)">
            <Directory Id="Data" Name="Data">

我的所有组件声明大致如下:

<Component Id="DocumentationParty_Business_TestCases_v1xlsx.component" Guid="{YOURGUID-1234-1234-84B3-C595A63428AD}" MultiInstance="yes">
    <File Source="../../Development/Integration/SSIS/Documentation/Party_Business_Test Cases_v1.xlsx" KeyPath="yes" Id="DocumentationParty_Business_TestCases_v1xlsx.file" />
</Component>

打破它很容易,您只需要将GUID更改为*以及上述错误结果。这打破了:

<Component Id="DocumentationParty_Business_TestCases_v1xlsx.component" Guid="*" MultiInstance="yes">
    <File Source="../../Development/ClaimsIntegration/SSIS/Documentation/Party_Business_Test Cases_v1.xlsx" KeyPath="yes" Id="DocumentationParty_Business_TestCases_v1xlsx.file" />
</Component>

我有一个.wxs文件,用于安装组件的每个目录。我的所有组件持有.wxs文件都具有以下结构:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>
    <ComponentGroup Id="DatabasePolicy_Files">
      <ComponentRef Id="DatabasePolicyCreateDatabasecmdtemplate.component" />
    </ComponentGroup>
    <DirectoryRef Id="DataPolicy">
      <Component Id="DatabasePolicyCreateDatabasecmdtemplate.component" Guid="*" MultiInstance="yes">
        <File Source="../../Development/Database/Policy/CreateDatabase.cmd.template" KeyPath="yes" Id="DatabasePolicyCreateDatabasecmdtemplate.file" />
      </Component>
    </DirectoryRef>
  </Fragment>
</Wix>

每个<ComponentGroup>都通过<ComponentGroupRef>包含在我的主.wxs文件中。这适用于我所有的MSI项目,只有在我开始使用合并模块时才会中断。此外,我已经尝试评论除了与上述定义匹配的所有组件,但它仍然会出现相同的错误。

有什么问题?

1 个答案:

答案 0 :(得分:6)

我自己也有类似的问题,并根据您的错误消息,它可能是相同的。 尝试添加一个ComponentGuidGenerationSeed,它可以解决您的问题。 ComponentGuidGenerationSeed也适用于所有子文件夹,因此顶级的单个文件夹对所有文件夹都足够。

示例:

<Directory Id="DOCUMENTATIONFOLDER" Name="Documentation" ComponentGuidGenerationSeed="a9f690d3-22b3-488f-bdac-bb665c25933c"/>

http://wixtoolset.org/documentation/manual/v3/xsd/wix/directory.html

  

组件指南生成种子是一个必须在a时使用的指南   具有生成guid指令(“*”)的组件不是以a为根   标准Windows Installer目录(例如,ProgramFilesFolder   或CommonFilesFolder)。