自从我们从 Visual Studio 6 切换到 Visual Studio 2008 以来,我们一直在使用 MFC90.dll 和 msvc[pr]90.dll 以及私有并排配置中的清单文件,以免担心版本或将它们安装到系统中。
在 SP1 之前,它运行良好(在我们的开发人员机器上仍然运行良好)。既然我们已经在 SP1 后进行了一些测试,我从昨天早上开始就一直在拔头发。
首先,我们的 NSIS 安装程序脚本从 redist 文件夹中提取 dll 和清单文件。这些不再正确,因为该应用程序仍链接到 RTM 版本。
因此,我将定义添加_BIND_TO_CURRENT_VCLIBS_VERSION=1
到我们所有的项目中,以便他们将使用 redist 文件夹中的 SP1 DLL(或在新服务包出现时使用后续的)。我花了几个小时才找到这个。
我已经从编译中仔细检查了中间文件文件夹中生成的清单文件,它们正确列出了 9.0.30729.1 SP1 版本。我已经两次和三次检查取决于一台干净的机器:它都链接到本地 dll,没有错误。
运行应用程序仍然会出现以下错误:
应用程序未能正确初始化 (0xc0150002)。单击确定以终止应用程序。
我在 google 或 microsoft 上进行的搜索都没有找到与我的具体问题相关的任何内容(但有回溯到 2005 年的此错误消息)。
有人对 SP1 有过类似的问题吗?
选项:
- 找到问题并修复它,使其正常工作(首选)
- 安装redist
- 挖出旧的 RTM dll 和清单文件并删除 #define 以使用当前的。(我在较早的安装程序版本中得到了它们,因为 Microsoft 将它们从您的 redist 文件夹中删除!)
编辑:我尝试在关闭定义的情况下重新构建(链接到 RTM dll),只要 RTM dll 安装在文件夹中,它就可以工作。如果将 SP1 dll 放入,则会收到以下错误:
c:\Program Files\...\...\X.exe
此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。
没有其他人必须处理这个问题吗?
编辑:只是为了笑,我在我的测试机器上下载并运行了 VS2008SP1 的 vcredist_x86.exe。它有效。使用 SP1 DLL。还有我的 RTM 链接应用程序。但不是在 SP1 之前工作的私有并行分发中。