Могу ли я использовать автоматически сгенерированные GUID с модулем слияния?

Я использую автогид в моем <Product>, но не могу понять, как использовать их с <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> включен в мой главный файл .wxs через <ComponentGroupRef>. Это работает во всех моих проектах MSI и перестает работать только сейчас, когда я начал работать с модулями слияния. Кроме того, я попытался закомментировать все компоненты, за исключением тех, которые соответствуют приведенному выше определению, и он все еще ломается из-за той же ошибки.

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


person sirdank    schedule 22.12.2015    source источник
comment
В сообщении об ошибке упоминается TARGETDIR\company папка, но эта company часть отсутствует в вашем фрагменте. Может ли быть, что компонент X имеет другой родительский каталог, и то, что говорится в сообщении об ошибке, является правдой?   -  person Yan Sklyarenko    schedule 24.12.2015
comment
@YanSklyarenko company - это значение, сопоставленное с !(loc.ProductManufacturerFolderName). Я постараюсь отредактировать свой пост, чтобы было понятнее.   -  person sirdank    schedule 28.12.2015
comment
Можете ли вы также добавить фрагмент с объявлением компонента X?   -  person Yan Sklyarenko    schedule 28.12.2015
comment
@YanSklyarenko Понятно. Обновление добавлено.   -  person sirdank    schedule 28.12.2015
comment
Все ли составляющие элементы находятся под <Directory> элементом? Причина, по которой я задаю все эти вопросы, заключается в том, что я подозреваю, что есть компонент, который создан немного иначе, чем все остальные, и вызывает ошибку, а все остальное верное.   -  person Yan Sklyarenko    schedule 28.12.2015
comment
@YanSklyarenko Все они находятся в отдельных файлах .wxs в папке <DirectoryRef>s. Я обновил свой вопрос. Спасибо за вашу помощь.   -  person sirdank    schedule 28.12.2015
comment
дубликат заголовка stackoverflow.com/questions/28181501/   -  person john ktejik    schedule 01.07.2021


Ответы (1)


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

Пример:

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

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

Seed создания компонента Guid - это руководство, которое необходимо использовать, когда компонент с директивой generate guid («*») не внедрен в стандартный каталог установщика Windows (например, ProgramFilesFolder или CommonFilesFolder).

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