2015-12-22 3 views
2

Я использую автогиды в своем <Product>, но не могу понять, как их использовать с <Module>. Я только получаю эту ошибку:Могу ли я использовать автоматически созданные GUID с модулем слияния?

The component X has a key file with path 'TARGETDIR\company...'. Since this path is not rooted in one of the standard directories (like ProgramFiles Folder), the component does not meet the criteria for having an automatically generated 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> входит в мой мастер .wxs файл через <ComponentGroupRef>. Это работает во всех моих проектах MSI и ломается только сейчас, когда я начал работать с модулями слияния. Кроме того, я пробовал комментировать все компоненты, кроме тех, которые соответствуют указанному выше определению, и он по-прежнему прерывается с той же ошибкой.

В чем проблема?

+0

Сообщение об ошибке упоминает 'папку TARGETDIR \ company', но' company' часть не существует в вашем фрагменте кода. Может ли быть так, что компонент X имеет другой родительский каталог, и что говорит сообщение об ошибке? –

+0

@YanSklyarenko 'company' - это значение, отображаемое на'! (Loc.ProductManufacturerFolderName) '. Я попытаюсь изменить свой пост, чтобы сделать это более ясным. – sirdank

+0

Можете ли вы добавить фрагмент с объявлением компонента X? –

ответ

3

У меня была такая же проблема сама и на основе вашего сообщения об ошибке, вероятно, это одно и то же. Попробуйте добавить компонент ComponentGuidGenerationSeed, который должен решить вашу проблему. ComponentGuidGenerationSeed действует также во всех подпапках, поэтому для всех папок достаточно одного на верхнем уровне.

Пример:

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

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

The Component Guid Generation Seed is a guid that must be used when a Component with the generate guid directive ("*") is not rooted in a standard Windows Installer directory (for example, ProgramFilesFolder or CommonFilesFolder).

+1

Я согласен с этим, так как это уменьшает объем работы для крупного обновления, но я предполагаю, что мне все равно придется обновлять эти семена. Если кто-то другой предоставляет решение без этого недостатка, я могу быть вынужден принять его вместо этого. :) – sirdank