草庐IT

c++ - 应用程序不能与 VS 2008 SP1 DLL 一起运行,以前的版本适用于 RTM 版本

coder 2023-05-02 原文

自从我们从 Visual Studio 6 切换到 Visual Studio 2008 以来,我们一直在使用 MFC90.dll 和 msvc[pr]90.dll 以及私有(private)并行配置中的 list 文件,以免担心版本或将它们安装到系统中。

在 SP1 之前,它运行良好(在我们的开发人员机器上仍然运行良好)。既然我们已经在 SP1 后进行了一些测试,我从昨天早上就开始拔头发了。

首先,我们的 NSIS 安装程序脚本从 redist 文件夹中提取 dll 和 list 文件。这些不再正确,因为该应用仍链接到 RTM 版本。

因此,我将 _BIND_TO_CURRENT_VCLIBS_VERSION=1 的定义添加到我们所有的项目中,以便它们将使用 redist 文件夹中的 SP1 DLL(或在新服务包出现时使用后续的)。我花了几个小时才找到这个。

我已经从编译中仔细检查了中间文件文件夹中生成的 list 文件,它们正确列出了 9.0.30729.1 SP1 版本。我已经两次和三次检查取决于一台干净的机器:它都链接到本地​​ dll,没有错误。

运行应用程序仍然出现以下错误:

The application failed to initialize properly (0xc0150002). Click on OK to terminate the application.

我在 google 或 microsoft 上进行的搜索都没有找到与我的具体问题相关的任何内容(但有此错误消息可追溯到 2005 年)。

有人对 SP1 有过类似的问题吗?

选项:

  • 找到问题并解决它,使其正常工作(首选)
  • 安装redist
  • 挖出旧的 RTM dll 和 list 文件并删除 #define 以使用当前的。 (我在较早的安装程序版本中得到了它们,因为 Microsoft 将它们从您的 redist 文件夹中删除了!)

编辑:我尝试在关闭定义的情况下重新构建(链接到 RTM dll),只要 RTM dll 安装在文件夹中,它就可以工作。如果将 SP1 dll 放入,则会出现以下错误:

c:\Program Files\...\...\X.exe

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

没有其他人必须处理这个问题吗?

编辑: 只是为了笑,我在我的测试机器上下载并运行了 VS2008SP1 的 vcredist_x86.exe。 有效。使用 SP1 DLL。还有我的 RTM 链接应用程序。但是在 SP1 之前工作的私有(private)并行分发中。

最佳答案

上周我自己也解决了这个问题,现在我认为自己有点专家了;)

我 99% 确定并非所有 dll 和静态库都使用 SP1 版本重新编译。你需要放

#define _BIND_TO_CURRENT_MFC_VERSION 1
#define _BIND_TO_CURRENT_CRT_VERSION 1

进入您正在使用的每个项目。对于每个实际大小的项目,很容易忘记一些未重新编译的小库。

还有更多的标志来定义要绑定(bind)的版本;它记录在 http://msdn.microsoft.com/en-us/library/cc664727%28v=vs.90%29.aspx .作为上述行的替代方案,您还可以将

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

它将绑定(bind)到所有 VC 库(CRT、MFC、ATL、OpenMP)的最新版本。

然后,检查嵌入式 list 的内容。下载XM资源编辑器:http://www.wilsonc.demon.co.uk/d10resourceeditor.htm .打开解决方案中的每个 dll 和 exe。查看“XP 主题 list ”。检查右侧的“版本”属性是否为“9.0.30729.1”。如果是“9.0.21022”,则某些静态库正在拉入旧版本的 list 。

我发现,在许多情况下,两个 版本都包含在 list 中。这意味着一些库使用 sp1 版本而其他库不使用。

调试哪些库没有设置预处理器指令的好方法:临时修改您的平台 header ,以便在尝试嵌入旧 list 时停止编译。打开 C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\include\crtassem.h。搜索“21022”字符串。在该定义中,放置一些无效的内容(将“定义”更改为“blehbleh”左右)。这样,当您编译一个未设置 _BIND_TO_CURRENT_CRT_VERSION 预处理器标志的项目时,您的编译将停止,您将知道您需要添加它们或确保它适用于任何地方。

还要确保使用 Dependency Walker,这样您就知道要提取哪些 dll。在虚拟机上安装没有更新(仅 SP2)的全新 Windows XP 拷贝是最简单的。通过这种方式,您可以确定 SxS 文件夹中没有任何内容正在使用,而不是您提供的并排 dll。

关于c++ - 应用程序不能与 VS 2008 SP1 DLL 一起运行,以前的版本适用于 RTM 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59635/

有关c++ - 应用程序不能与 VS 2008 SP1 DLL 一起运行,以前的版本适用于 RTM 版本的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  4. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  7. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  8. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  9. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  10. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

随机推荐