Я использую WiX 3.8 для создания проекта, который устанавливает продукт. Инсталлятор в основном готов. Одна из программ, устанавливаемых пакетом, зависит от сторонних библиотек DLL, которые часто обновляются. Как ни странно, номер версии dll регулярно меняется. При первом написании проекта установщика я не рассматривал возможность включения поддержки изменения имен файлов и писал каждый компонент вручную.
Это поведение должно быть изменено в будущем. Если я правильно понимаю, генерировать компоненты для файлов автоматически можно с помощью Задача HeatDirectory. Теперь я создал пример проекта, используя задачу HeatDirectory, которая работает. Но есть некоторое несоответствие в выходных данных задачи HeatDirectory и созданных вручную компонентов, которые я использовал в прошлом.
Я хотел бы, чтобы задача HeatDirectory производила тот же результат, что и мой ручной подход, насколько это возможно. Ниже приведен код двух компонентов, сначала созданных вручную, а затем созданных задачей HeatDirectory:
Компоненты, созданные вручную:
<ComponentGroup Id="ThirdParty.v13.2" Directory="INSTALLFOLDER">
<Component
Id="CMP_ThirdParty.v13.2.dll"
Guid="AC5E00F0-B458-4272-B132-F13594ED4916">
<File
Id="ThirdParty.v13.2.dll"
Name="ThirdParty.v13.2.dll"
Source="ComponentsDir\ThirdParty\ThirdParty.v13.2.dll"
KeyPath="yes"
Assembly=".net"
AssemblyApplication="ThirdParty.v13.2.dll"
AssemblyManifest="ThirdParty.v13.2.dll"
Compressed="no"
DiskId="$(var.ThirdPartyDiskId)"/>
</Component>
<Component
Id="CMP_ThirdParty.v13.2.xml"
Guid="64AC3F5F-38E9-41EC-B714-636F5D9C0CB4">
<File
Id="ThirdParty.v13.2.xml"
Name="ThirdParty.v13.2.xml"
Source="Source="ComponentsDir\ThirdParty\ThirdParty.v13.2.xml"
KeyPath="yes"
Compressed="no"
DiskId="$(var.ThirdPartyDiskId)"/>
</Component>
</ComponentGroup>
Сгенерированный код задачи HeatDirectory:
<ComponentGroup Id="Files">
<Component
Id="cmp9D064A733360960E07277CFD9AB84AF1"
Directory="INSTALLFOLDER"
Guid="*">
<File
Id="filD5DCB6E091D2D12303E2E80B0B767438"
KeyPath="yes"
Source="$(var.Path)\ThirdParty.v13.2.dll"/>
</Component>
<Component
Id="cmpA8681A63A8A4991D18824BA17E4CA4BF"
Directory="INSTALLFOLDER"
Guid="*">
<File
Id="fil17554B3CD0E576337AEC758831009938"
KeyPath="yes"
Source="$(var.Path)\ThirdParty.v13.2.xml"/>
</Component>
</ComponentGroup>
Код, выдающий приведенный выше вывод, выглядит следующим образом:
<Target Name="BeforeBuild">
<HeatDirectory
DirectoryRefId="INSTALLFOLDER"
OutputFile="Files.wxs"
Directory="S:\omePath"
SuppressRootDirectory="true"
ToolPath="$(WixToolPath)"
AutogenerateGuids="true"
ComponentGroupName="Files"
PreprocessorVariable="var.Path">
</HeatDirectory>
</Target>
Теперь я запишу характеристики сгенерированного кода задачи HeatDirectory, который я хотел бы изменить:
- Каждый компонент в группе компонентов имеет атрибут
Directory
. Я хочу, чтобы родительский элементComponentGroup
имел атрибутDirectory
и опускал его в каждом дочернем компоненте. - Мне нужны статические направляющие.
- Я хочу, чтобы атрибут
Id
компонента состоял из префиксаCMP
, за которым следует имя файла. Я понимаю, что в проекте не может быть двух файлов с одинаковым именем, но я знаю, что это не так. Мне не нужен загадочный идентификатор, сгенерированный задачей. - Дочерний элемент
File
компонента слишком спартанский. Я хочу, чтобы задача HeatDirectoy создавала атрибутName
для каждого файла, который является текущим именем файла. Затем к атрибутуCompressed
нужно добавить значениеno
, а кDiksId
добавить значение переменной, которое можно как-то указать в задаче. - Если собранный файл является dll, задача должна добавить атрибуты
Asssembly
со значением.net
,AssemblyApplication
с именем собранного файла в качестве значения иAssemblyManifest
также с именем собранного файла в качестве значения.
Можно ли добиться этого с помощью задачи HeatDirectory?
wixcop
для файлов, созданных вручную, и посмотрите, какие различия остались. (Конечно, сначала сделайте резервную копию.) Вы можете обнаружить, что многие из ваших требований не являются требованиями. - person Tom Blodget   schedule 11.03.2014Componentgroup
, например. Применение ‹xsl:template match=/Wix/Fragment/ComponentGroup› ‹xsl:attribute name=Directory› ‹xsl:text›INSTALLFOLDER‹/xsl:text› ‹/xsl:attribute› ‹xsl:apply-templates /› ‹/ xsl:template› не действует. - person BdN3504   schedule 11.03.2014