Я использую автогид в моем <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 и перестает работать только сейчас, когда я начал работать с модулями слияния. Кроме того, я попытался закомментировать все компоненты, за исключением тех, которые соответствуют приведенному выше определению, и он все еще ломается из-за той же ошибки.
В чем проблема?
TARGETDIR\company
папка, но этаcompany
часть отсутствует в вашем фрагменте. Может ли быть, что компонент X имеет другой родительский каталог, и то, что говорится в сообщении об ошибке, является правдой? - person Yan Sklyarenko   schedule 24.12.2015company
- это значение, сопоставленное с!(loc.ProductManufacturerFolderName)
. Я постараюсь отредактировать свой пост, чтобы было понятнее. - person sirdank   schedule 28.12.2015<Directory>
элементом? Причина, по которой я задаю все эти вопросы, заключается в том, что я подозреваю, что есть компонент, который создан немного иначе, чем все остальные, и вызывает ошибку, а все остальное верное. - person Yan Sklyarenko   schedule 28.12.2015<DirectoryRef>
s. Я обновил свой вопрос. Спасибо за вашу помощь. - person sirdank   schedule 28.12.2015