我们正在将一个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
主应用程序有两种部署情况:
- 具有用户管理员权限的计算机: 我们建议在使用应用程序MainApp之前先安装Visual Studio可再发行包的先决条件。由于用户具有管理员权限,因此安装可再发行包没有问题。应用程序会自动链接到WinSxS文件夹中的VC redist DLL。
- 非管理员用户的计算机: 这种情况存在问题。用户没有管理员权限,因此不可能安装VS2008SP1可再发行包。
我们正在采取以下措施解决这个问题:
针对MainApp的目标使用宏_BIND_TO_CURRENT_OPENMP_VERSION进行编译(适用于MainApp中所有项目)。
分发VS2008SP1可再发行DLL作为私有程序集,并将它们复制到应用程序安装目录中。
问题:
- 使用标志_BIND_TO_CURRENT_VCLIBS_VERSION是否有任何副作用(特别是当VC可再发行包和私有VC redist程序集同时存在时)?
- 我们无法控制外部库ExtStaticLib1、ExtDynamicDll1,并且它们不会使用宏_BIND_TO_CURRENT_OPENMP_VERSION进行编译。但它们已经使用VSSp1编译。这种设置会有任何问题吗?
- 如果有新版本的VS可再发行包可用(新于9.0.30729.4248),是否会出现问题?
谢谢。