我们正在将一个 VC++ 项目从 Visual Studio 2003 移植到 Visual Studio 2008 SP1(9.0.30729.4148)。依赖的外部库也使用 Visual Studio 2008 SP1 编译。
MainApp - Main application Compiled with VS SP1 9.0.30729.4148
ExtStaticLib1 - External static library compiled with VS SP1 9.0.30729.4148
ExtDynamicDll1 - External DLL compiled with VS SP1 9.0.30729.4148
Main 应用程序有两种部署方案:
- 具有用户管理员权限的机器:我们建议在使用应用程序 MainApp 之前先安装 Visual Studio 可再发行包。这很好用,因为用户具有管理员权限并且安装可再发行包没有问题。应用程序自动链接到 WinSxS 文件夹中的 VC redist DLL。
- 具有非管理员用户的机器:这种情况是有问题的。用户没有管理员权限。因此,无法安装 VS2008SP1 可再发行包。
我们正在做以下事情来解决这个问题:
使用宏 _BIND_TO_CURRENT_OPENMP_VERSION 编译 MainApp 目标(适用于 MainApp 中的所有项目)。
将 VS2008SP1 可再发行 DLL 作为私有程序集分发,并将它们复制到应用程序安装目录中。
问题:
- 使用标志 _BIND_TO_CURRENT_VCLIBS_VERSION 是否有任何副作用(特别是当 VC 可再发行包和私有 VC 可再发行程序集同时存在时)?
- 我们对外部库 ExtStaticLib1、ExtDynamicDll1 没有太多控制权,因此它们不会使用宏 _BIND_TO_CURRENT_OPENMP_VERSION 进行编译。但是它们已经用 VSSp1 编译过了。这个设置会有问题吗?
- 如果有更新版本的 VS 可再发行版本可用(比 9.0.30729.4248 更新),是否会有任何问题。
谢谢。