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



我在<Product>中使用了auto-guid,但不知道如何将它们与<Module>一起使用。我只得到这个错误:

组件X有一个密钥文件,路径为"TARGETDIR\company…"。由于此路径不是根目录(如ProgramFiles文件夹),该组件不符合具有自动生成的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>包含在我的master.wxs文件中。这适用于我所有的MSI项目,直到我开始使用合并模块后才中断。此外,我已经尝试注释掉所有组件,除了与上面的定义匹配的组件,它仍然会出现相同的错误。

问题出在哪里?

我自己也遇到过类似的问题,根据您的错误消息,情况可能是一样的。尝试添加ComponentGuidGenerationSeed,它应该可以解决您的问题。ComponentGuidGenerationSeed也作用于所有子文件夹,因此顶层的一个子文件夹就足以容纳所有文件夹。

示例:

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

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

组件Guid生成种子是在具有generate guid指令("*")的组件不植根于标准Windows安装程序目录(例如ProgramFilesFolder或CommonFilesFolder)。

相关内容

  • 没有找到相关文章

最新更新