Как сохранить целостность ссылки на файл из библиотеки установки WIX

Я использую надстройку Wix Toolset 3.8 Visual Studio. Я создал библиотеку установки WIX, которая содержит некоторые общие компоненты, которые будут использоваться различными проектами развертывания служб. Эта библиотека содержит ссылки на несколько файлов решений, которые необходимо упаковать в каждое развертывание.

универсальный проект библиотеки установки 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.)

Другие вопросы по тегам