我构建了一个动态链接到多个 DLL 的可执行文件。其中大部分默认安装在 Windows 上,但版本可能略有不同。其他的我随应用程序分发,但它们可能又依赖于其他 DLL。
如果我在本地运行可执行文件并收到 Windows 错误消息“无法加载 [whatever]。应用程序配置不正确”,这似乎意味着缺少“whatever”所依赖的库。但它(相当令人恼火)忽略了准确指定它在加载时遇到问题的 DLL。有时我可以使用 Dependency Walker 来解决这个问题查看是否有明显缺失的库。其他时候,我可以诉诸 Process Monitor这可以告诉我 Windows 在发出错误消息之前正在寻找哪个文件。
但是,当最终用户尝试诊断他们的问题时,这些并不是最终用户必须使用的合理工具。有什么方法可以让 Windows 准确地说出它在解析时遇到问题的库,以便可以将其输出到日志或显示在消息框中?
最佳答案
根据我的经验,此类错误的一个常见原因是意外运送了一个链接到 C 运行时调试版本的组件,该版本明确不可再分发,因此只有在最终用户的系统上,如果他们碰巧安装了匹配版本的 VisualStudio。它的名称类似于 MSVCR80D.DLL 而不是 MSVCR80.DLL。
Dependency Walker 无疑是开发人员用来检查可执行文件的正确工具。它可以 Hook 应用程序以获取 DLL 加载事件并运行它,因此您可以发现在运行时动态加载的 DLL 以及在构建时命名的 DLL。
Dependency Walker 也是可编写脚本的,并且可以写入日志文件。我将这种方式用作构建过程的一部分,以在打包发布之前验证发货。我将所有要传送的文件暂存到它们传送的目录树的模型中。我使用 dependency walker 托管的应用程序 Debug模式,使其加载所有可选的点点滴滴,然后退出。 Depends.exe 给我留下了一个很好的日志文件,我用 Perl 脚本检查它,如果从系统上的任何地方加载任何 DLL 而不是 \WINDOWS 或暂存区域,或者如果一个加载了意外版本或调试版本的 C 运行时。只有在检查成功后,我才会构建将要发布的 InnoSetup 安装程序包。这已经避免了几次尴尬,并且非常值得为弄清楚该怎么做而付出的努力。
如果您知道每个 DLL 要么是“官方”Windows DLL 要么是您发货的一部分,那么您就很有可能在客户的机器上正常工作。
编辑: Dependency Walker 的官方主页是个四处闲逛的好地方。那里提供的版本可能比 MSVS 附带的版本更新,并且有大量关于高级用途的不错的文档。
我可以确认我已经在 depends.exe 下运行了 IE,但根本没有进行太多测试。
关于windows - 在最终用户系统上调试 "application configuration is incorrect"问题的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178729/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer