当我的文件集包含具有对C++运行时DLL的一个或多个依赖项的DLL时,我需要从VCRedist.exe安装该文件。这可能很困难,因为每个DLL都依赖于特定版本的C++运行时。使用WiX自动安装运行时库
如何将运行时可重新分配自动添加到我的安装程序?
如何在WinSxS中处理需要不同版本C++运行时的DLL?
当我的文件集包含具有对C++运行时DLL的一个或多个依赖项的DLL时,我需要从VCRedist.exe安装该文件。这可能很困难,因为每个DLL都依赖于特定版本的C++运行时。使用WiX自动安装运行时库
如何将运行时可重新分配自动添加到我的安装程序?
如何在WinSxS中处理需要不同版本C++运行时的DLL?
heat和Votive都不支持所请求的功能。运行时DLL必须手动添加。
您可以简单地确保安装最新的vcredist,它会自动包含对旧版本的支持。
我认为最简单的方法是使用bootstrapper在运行安装程序之前安装运行时。您可能需要创建自己的包,但为此,使用Bootstrapper Manifest Generator很容易。
在product.xml您可以添加安装检查,以确保它没有安装两次,例如:
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"/>
</InstallChecks>
其他的GUID见here。
您需要安装库所需的最新版本(最高版本)以及将旧版本重定向到新版本的策略文件。
您可以使用Visual Studio安装的合并模块执行这两个操作。他们通常位于C:\Program Files\Common Files\Merge Modules
。请参阅MergeRef
元素和示例how to install Visual C++ redistributable with your installer。您还需要将策略合并模块添加到您的安装中。
有没有'热'或Votive支持检测到这一点?我应该在检测后管理.wxs文件,但最好创建一个片段将不胜感激。 – harper 2011-05-17 08:38:09
引导程序不是wix的一部分,因此您无法使用此功能。请参阅例如'C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bootstrapper \ Packages \ *'或'C:\ Program Files(x86)\ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ *'为现有文件。使用BMG创建这样的文件。 – wimh 2011-05-17 09:57:21
我不需要一个引导程序。在WiX.CHM部分的“如何:使用安装程序安装Visual C++可再发行组件”中,您可以找到如何包含合并模块。这是WiX的一部分,我寻求一种方法来让这个更方便,更不容易出错。 – harper 2011-05-17 14:03:05