如何从WIX设置库维护文件引用完整性

时间:2014-02-10 20:38:06

标签: wix wix3.8 votive wixlib

我正在使用Wix Toolset 3.8 Visual Studio加载项。我创建了一个WIX设置库,它封装了各种服务部署项目将使用的一些常用组件。该库包含对需要打包到每个部署中的多个解决方案文件的引用。

generic WIX Setup Library Project with solution file references

这些依赖项在我的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安装项目中以进行服务部署时,问题就出现了。

It would be shameful to include every solution file in the Setup Project directly.

<Custom Action="DependencyAction"  Before="InstallFinalize">
    NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE
</Custom>

安装项目在文件夹结构中的相对深度不同,因此相对路径不会指向与从WIX库引用时相同的位置。当我从WIX库引用操作或功能时,我收到类似The system cannot fine the file '.\Dependency1.dll'的错误。XML正在被读取,并且从安装项目位置而不是从库项目位置引用,因此相对目录是错误的。我可以将WIX库中的相对路径设置为使用它的Setup Project应该是什么,或者我也可以将解决方案文件复制到Setup Project目录中,但当然,这完全违背了使用常见的WIX库。还有其他服务部署项目需要使用此库。

所以问题是,如何使用可以由使用它的安装项目使用的方式在WIX库中引用解决方案文件,而不管安装项目所在的目录是什么?

1 个答案:

答案 0 :(得分:4)

创建二进制.wixlib,其中包含您的创作中引用的文件。 (这是命令行中的-bf,.wixproj中的BindFiles属性,“将文件绑定到库文件中”复选框中的Votive。)