Как сохранить целостность ссылки на файл из библиотеки установки WIX
Я использую надстройку Wix Toolset 3.8 Visual Studio. Я создал библиотеку установки WIX, которая содержит некоторые общие компоненты, которые будут использоваться различными проектами развертывания служб. Эта библиотека содержит ссылки на несколько файлов решений, которые необходимо упаковать в каждое развертывание.
Эти зависимости используются в моих фрагментах библиотеки wix несколькими различными способами. Например:
<Binary Id="InstallationScript" SourceFile=".\Dependency1.vbs" />
<CustomAction Id="DependencyAction"
BinaryKey="InstallationScript"
VBScriptCall=""
Execute="deferred"
Return="check"
HideTarget="no"/>
<Component Id="DLL_Component" Guid="4745D9E2-0EBA-EE57-D8DB-677ADA9E9EC8">
<File Id="DLL1" Name="Dependency1.DLL" Source=".\Dependency1.dll" Vital="yes" KeyPath="yes" DiskId="1"/>
</Component>
Библиотека установки WIX прекрасно работает, независимо от того, добавляю ли я файлы в проект в виде ссылки или копирую их в каталог проекта, и указываю ли я на них ссылку в каталоге проекта или использую относительный путь к их исходному расположению. Проблема возникает, когда я включаю фрагмент в мой проект установки WIX для развертывания службы.
<Custom Action="DependencyAction" Before="InstallFinalize">
NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE
</Custom>
Проект установки не находится на той же относительной глубине в структуре папок, поэтому относительный путь не указывает на то же место, что и при обращении из библиотеки WIX. Когда я ссылаюсь на действие или функцию из библиотеки WIX, я получаю такие ошибки, как The system cannot fine the file '.\Dependency1.dll'
XML читается точно так, как он есть, и на него ссылаются из расположения проекта установки, а не из расположения проекта библиотеки, поэтому относительный каталог неверен. Я могу установить относительный путь в библиотеке WIX таким, каким он должен быть для проекта установки, который его использует, или я могу также скопировать файлы решения в каталог проекта установки, но, конечно, это полностью противоречит цели использования общая библиотека WIX. Существуют другие проекты развертывания служб, которые должны использовать эту библиотеку.
Таким образом, вопрос заключается в том, как я могу ссылаться на файлы решений в библиотеке WIX таким образом, чтобы его мог использовать проект установки, который его использует, независимо от каталога, в котором находится проект установки?
1 ответ
Создайте двоичный файл.wixlib, содержащий файлы, на которые есть ссылки в вашей статье. (Это -bf в командной строке, свойство BindFiles в.wixproj, флажок "Привязать файлы в файл библиотеки" в Votive.)