赢7,64位,DLL的问题

我的可执行文件有问题。 我在我的Win-7 64位开发盒上运行这个C ++ 32位可执行文件,它也包含所有这些MS应用程序(Visual Studio 2008 + 2010,TFS,SDK,MS Office)…而且它仍然运行得很好。

现在我得到了同样的程序的客户端安装,并要求用干净的Win-7安装来testing它。 因此,我得到了我的Win-7 64位VM Ware,并将其更新到了Win-7 SP 1(与我的开发者盒子完全相同的版本)。 但是,在我的开发者框中,一切都很好,该程序不适用于VW Ware(30天试用版)框。

x86依赖walker告诉我,下面的DLLs丢失:

  • API-MS-WIN-CORE-COM-L1-1-0.DLL
  • API-MS-WIN-CORE-的WinRT-ERROR-L1-1-0.DLL
  • API-MS-WIN-CORE-WinRT的-L1-1-0.DLL
  • API-MS-WIN-CORE-的WinRT-ROBUFFER-L1-1-0.DLL
  • API-MS-WIN-CORE-的WinRT-STRING-L1-1-0.DLL
  • API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
  • DCOMP.DLL
  • GPSVC.DLL
  • IESHIMS.DLL

我search了API-MS-WIN -…这些API,发现它们实际上已经是Win-7的一部分(有些网站声称属于Win-8和Win 2012服务器)。

我已经尝试了我发现的build议修复,它们是:

  • 运行'sfc / scannow'
  • 安装Visual Studio 2008 SP1运行时可执行文件

但是这并没有解决任何问题。 🙁

附注:我的开发箱也没有他们,似乎并不需要他们。 例如,我的盒子上的user32.dll不会链接到其中的一个,而在VM ware上安装。

任何想法如何解决这个问题? 我试图find一个合适的下载/修复MS页面,但失败了。

问候,托马斯


解决了我的问题之后,我想报告发现的内容,因为问题已经closures,所以我不能发表这个答案。

实际上所有的DLL报告由依赖walker工具,nameley那些

* API-MS-WIN-CORE-... 

typesDLL不是实际问题的一部分。

在我的情况下,3个OCX文件的注册丢失,然后一切都很好,但依赖walker工具仍然列出所有非常相同的DLL,即使现在程序运行良好。

它的要点:正如其他人所说,这个工具现在有点过时了,并不总是适合新的操作系统。 因此,请保持睁大眼睛,不要因为错过“API-MS-WIN-CORE-COM-L1-1-0.DLL”而误导,…问题可能完全在于别处。

此问题与缺lessVisual Studio“可再发行组件包”有关。 基于依赖性散步,哪一个丢失是不明显的,但我会先尝试一个与你的编译器版本对应的版本,看看是否正常运行:

VS 2015

VS 2013

VS 2010

VS 2008

我碰到这个问题,因为我正在使用VS编译器,但不是完整的VS环境。

我也是,我刚刚用MSCVC 2012解决了与C ++ Qt5和W7 64bits相同的问题。

一开始我以为这是一个MSVC / Windows DLL的问题,但正如BorisP所说,问题是在我的项目依赖。 关键是“ 如何知道Qt5中的项目依赖关系? ”。

因为我没有find任何明确的方法来知道它(依赖沃克没有多less帮助我…),我跟着下一个“逆程序”,不超过5分钟,并避免与Dll依赖关系很多头痛:

  1. 编译你的项目,并把可执行文件放到一个空的文件夹: myproject.exe
  2. 尝试执行它,它会检索一个错误(丢失DLL …)。
  3. 现在,从Qt(在我的情况下,他们在C:\ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin) 复制所有DLL到这个文件夹。
  4. 尝试再次执行,它可能会正常工作。
  5. 开始逐步删除,并尝试每次您的可执行文件仍然工作,试图离开最低限度所需的DLL。

当你把所有的DLL都放在同一个文件夹中时,find哪些是无效的(XML,webkit … whatever ..)更容易,因此这个方法不会超过五分钟。

我刚刚解决了同样的问题。

在这种情况下,依赖沃克是误导,使我失去了时间。 所以,从第一篇文章中“失踪”DLL的列表是没有帮助的,你可以忽略它。

解决方法是find您的项目正在调用哪些引用,并检查它们是否真正安装在服务器上。

@Ben Brammer,哪个3 .ocx文件丢失并不重要,因为他们只是为了Leo T Abraham的项目而丢失。 您的项目可能会调用其他dll。

在我的情况下,它不是3 .ocx文件,但缺lessMySQL连接器DLL。 在服务器上安装.Net的MySQL连接器之后,问题就消失了。

所以,总之,解决方法是:检查是否所有的项目引用都在那里。

干杯

如前所述,DCOMP是VC ++可再分发(实现OpenMP运行时)的一部分,是唯一真正缺less的组件。 其余的都是虚假的报道。

具体来说,API-MS-WIN-XXXX.DLL是API集合 – 实质上,自Windows 7以来逐渐引入了一个额外级别的调用间接引擎。依赖Walker开发似乎在这之前就停止了,而且它无法正确处理API集合。

所以没有什么可担心的。 你不会错过任何东西。

find真正需要的DLL丢失(如果确实是这个问题)的一个更好的select是运行ProcessMonitor,并从故障向后退出,在所有系统path中search特定DLL的失败探测序列。

我也遇到了这个问题,但似乎是一个共同的线程,我在网上的其他地方看到的解决scheme是“[重新]安装可重新分发的软件包”。 然而,对我来说,这是行不通的,因为运行我们的产品(安装可再发行组件包)的安装程序时出现问题,以testing我们shiny的新VS 2015版本。

由于列出的DLL不位于Visual Studio安装path(例如C:\ Program Files文件(x86)\ Microsoft Visual Studio 14.0 \ VC \ redist),因此尚未添加到安装。 这些api-ms-win- * dll作为Visual Studio 2015安装(例如C:\ Program Files(x86)\ Windows Kits \ 10 \ Redist)的一部分安装到Windows 10 SDK安装path中。 在Windows 10上安装工作正常,但在Windows 7上安装需要将这些DLL添加到我们的产品安装。 有关详细信息,请参阅https://support.microsoft.com/en-us/kb/2999226 ,其中描述了由VS 2015引起的这些依赖关系的增加,并为各种Windows平台提供了下载; 另请参阅https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/ ,其中介绍了CRT库的重新devise。 特别感兴趣的是使用通用CRT的分发软件部分下的第6项:

2015年9月11日更新:支持通用CRT的应用程序本地部署。 要获取应用程序本地部署的二进制文件,请安装Windows 10的Windows软件开发工具包(SDK)。二进制文件将安装到C:\ Program Files(x86)\ Windows Kits \ 10 \ Redist \ ucrt。 您将需要复制所有的DLL与您的应用程序(请注意,DLL的集合在Windows的不同版本中是不同的,所以您必须包含所有DLL以使您的程序可以在所有受支持的Windows版本上运行)。

这解决了我的问题。
卸载VS 2010可再发行组件包(如果已安装),请安装Microsoft Windows 7 SDK

我解决了这个问题。 当我注册OCX文件时,我用作为pipe理员执行的命令窗口运行它。

这个贡献并没有真正回答最初的问题,但考虑到这个线程的命中率,我认为有相当多的人处理API-MS-WIN-CORE-库无法find的问题。

我能够解决一个问题,我的应用程序拒绝以API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL通过更新Visual Studio没有find的错误信息开始。

我不认为我的构build环境(Win7 Pro SP1,Visual Studio Ultimate 2012)完全搞砸了,对于我的大部分项目来说都工作得很好。 但在一些非常特殊的情况下,我得到了错误信息(见下文)。

从最初的CD版本(我忘记查找版本号)更新到版本11.0.61030.00更新4的Visual Studio 11之后,也损坏的项目再次运行。

我希望这有助于某人!

应用程序启动时的错误消息

我有同样的问题。 花了几个小时在网上search后,我find了一个解决scheme。 我把文件:combase.dll(C:\ WINDOWS \ SYSTEM32)放在realese文件夹中并parsing。

在新安装的Windows 7上安装MSSQL Management Studio 2014,经过为期两天的荒谬战斗,我们的客户解决了这个问题。