276

我的可执行文件有问题。我在我的 Windows 7 64 位开发盒上运行这个 C++ 32 位可执行文件,它还具有所有这些 Microsoft 应用程序(Visual Studio 2008 + 2010、TFS、SDK、Microsoft Office)......而且它仍然运行得很好。

现在我得到了相同程序的客户端安装,并被要求使用干净的 Windows 7 安装对其进行测试。因此,我获得了一个 Windows 7 64 位 VMware 并将其更新到 Windows 7 SP 1(与我的开发人员框正在调整的版本完全相同)。但是,虽然在我的开发人员盒子上一切都很好,但该程序不适用于 VMware(30 天试用)盒子。

x86 Dependency Walker告诉我缺少以下 DLL 文件:

  • 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

我搜索了那些 API-MS-WIN-... DLL 文件,发现它们实际上应该已经是 Windows 7 的一部分(尽管有些网站声称属于 Windows 8 和 Windows Server 2012)。

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

  • 运行“证监会 /scannow”
  • 安装 Visual Studio 2008 SP1 运行时可执行文件

但这并没有解决任何问题。:-(

旁注:我的开发箱也没有它们,似乎也不需要它们。例如,我盒子上的 user32.dll 不链接其中之一,而 VMware 上的安装则链接。

关于如何解决这个问题的任何想法?我试图在 Microsoft 页面上找到合适的下载/修复,但失败了。


解决我的问题后,我想报告我发现的内容,但由于问题已关闭,因此我无法将其发布为答案。

实际上,Dependency Walker 工具报告丢失的所有 DLL 文件,即那些

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

类型 DLL 文件不是实际问题的一部分。

在我的情况下,缺少三个 OCX 文件的注册,之后一切都很好,但 Dependency Walker 工具仍然列出了所有与以前相同的 DLL 文件,即使程序现在运行良好也是如此。

它的要点:正如其他人所说,该工具现在有点过时了,并不总是能在较新的操作系统上正常工作。因此,请睁大眼睛,不要因缺少“API-MS-WIN-CORE-COM-L1-1-0.DLL”而被误导,......问题可能完全出在其他地方。

4

14 回答 14

63

此问题与缺少 Visual Studio“可再发行包”有关。根据依赖遍历,缺少哪个并不明显,但我会先尝试与您的编译器版本对应的那个,看看是否运行正常:

视觉工作室 2015

视觉工作室 2013

视觉工作室 2010

视觉工作室 2008

我遇到了这个问题,因为我使用的是 Visual Studio 编译器,而不是完整的 Visual Studio 环境。


敢在这里注入一个新的链接:最新支持的 Visual C++ 下载斯坦·阿斯穆尔,2018 年 11 月 29 日

于 2013-07-18T15:47:35.787 回答
19

我刚刚使用 MSCVC 2012 解决了 C++ Qt 5 和 Windows 7 64 位的相同问题。

一开始我以为是 MSVC/Windows DLL 文件问题,但正如 BorisP 所说,问题出在我的项目依赖项中。关键是“如何在 Qt 5 中了解你的项目依赖关系? ”。

由于我没有找到任何明确的方法来了解它(Dependency Walker对我没有多大帮助......),我接下来执行了不超过 5 分钟的“逆过程”,避免了 DLL 带来的很多麻烦文件依赖:

  1. 编译您的项目并将可执行文件放入一个空文件夹:myproject.exe
  2. 尝试执行它,它将检索错误(缺少 DLL 文件...)。
  3. 现在,将 Qt 中的所有 DLL 文件(在我的情况下它们位于 C:\Qt\Qt5.1.1\5.1.1\msvc2012_64_opengl\bin 中)复制到此文件夹。
  4. 尝试再次执行,它可能会正常工作。
  5. 开始逐步删除并尝试每次您的可执行文件仍然有效,尝试保留最少的必要 DLL 文件。

当您在同一个文件夹中拥有所有 DLL 文件时,更容易找到其中哪些是无效的(XML、WebKit ......无论什么......),因此这种方法不会花费超过五分钟的时间。

于 2013-12-16T08:18:27.527 回答
17

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

在这种情况下, Dependency Walker具有误导性,导致我浪费了时间。因此,第一篇文章中“丢失”的 DLL 文件列表没有帮助,您可以忽略它。

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

@Ben Brammer,缺少哪三个 .ocx 文件并不重要,因为它们仅在 Leo T Abraham 的项目中丢失。您的项目可能会调用其他 DLL 文件。

就我而言,不是三个 .ocx 文件,而是缺少 MySQL 连接器 DLL 文件。在服务器上安装 MySQL Connector for .NET 后,问题消失了。

因此,简而言之,解决方案是:检查您的所有项目引用是否都在那里。

于 2013-12-13T17:21:21.470 回答
14

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

具体来说,API-MS-WIN-XXXX.DLL 是API 集-本质上,自 Windows 7 以来逐渐引入了额外级别的调用间接。Dependency Walker开发似乎在此之前很久就停止了,它无法正确处理 API 集。

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

找到真正需要的丢失的 DLL 文件(如果这确实是问题)的更好选择是运行进程监视器并从失败中退后一步,在所有系统路径中搜索特定 DLL 文件的失败探针序列。

于 2016-03-27T06:40:27.327 回答
6

我也遇到了这个问题,但这里似乎是一个常见的线程,我在网上其他地方看到的解决方案是“[re]install the redistributable package”。但是,对我来说,这不起作用,因为在运行我们产品的安装程序(安装可再发行包)以测试我们闪亮的新 Visual Studio 2015 构建时出现了问题。

出现问题是因为列出的 DLL 文件不在 Visual Studio 安装路径中(例如,C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist),因此没有添加到安装中。这些 api-ms-win-* dll 作为 Visual Studio 2015 安装的一部分安装到 Windows 10 SDK 安装路径(例如 C:\Program Files (x86)\Windows Kits\10\Redist)。

在 Windows 10 上安装运行良好,但在 Windows 7 上安装需要将这些 DLL 文件添加到我们的产品安装中。有关更多信息,请参阅Windows 中的 Universal C Runtime 更新,其中描述了由 Visual Studio 2015 引起的这些依赖项的添加,并提供了各种 Windows 平台的下载;另请参阅介绍通用 CRT,它描述了 CRT 库的重新设计。特别感兴趣的是标题为使用通用 CRT 的分发软件部分下的第 6 项:

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

于 2016-02-17T19:39:24.067 回答
5

这个贡献并没有真正回答最初的问题,但考虑到这个线程的命中率,我假设有很多人在处理找不到 API-MS-WIN-CORE-库的问题。

我能够通过简单地更新 Visual Studio 来解决我的应用程序拒绝以错误消息启动 API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL 的问题。

我不认为我的构建环境(Windows 7 Pro SP1、Visual Studio Ultimate 2012)完全搞砸了,它适用于我的大多数项目。但在一些非常具体的情况下,我收到了错误消息(见下文)。

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

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

于 2014-05-13T15:37:38.773 回答
3

这为我解决了这个问题:

如果您已经安装了 Visual Studio 2010 可再发行包,请卸载它,然后安装Microsoft Windows 7 SDK

于 2013-08-13T06:22:27.970 回答
2

我解决了这个问题。当我注册 OCX 文件时,我使用以管理员身份执行的命令窗口运行它。

于 2014-02-04T03:33:21.207 回答
1

对于任何来到这里但遇到Photoshop问题的人:我的解决方案是首先卸载 MS VC++ 可再发行组件 x86 和 64。然后安装一个适合 Windows 版本和架构(86 或 64)的。

于 2017-12-18T12:31:30.023 回答
0

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

于 2014-09-16T19:35:28.467 回答
0

我有同样的问题。在网上花了几个小时搜索后,我找到了适合我的解决方案。

我将文件 combase.dll 文件 (C:\Windows\System32) 复制到发布文件夹,它解决了问题。

于 2015-06-26T15:12:05.663 回答
0

我建议还检查当前使用了多少内存。

事实证明,无法找到这些 DLL 文件是尝试在 Visual Studio 中运行程序(运行或调试)时出现的第一个症状。

经过半个多小时的头疼,搜索网络,运行Process MonitorTask Manager,并且依赖,一个完全不同的程序从一开始就一直在运行,报告“内存不足;尝试停止一些程序”或一些这样的。在杀死 Firefox、Thunderbird、Process Monitor 和依赖后,一切都恢复了。

于 2018-09-21T14:53:35.390 回答
0

在尝试全新的 Windows 7 OEM 安装并升级到 Windows 10 后,我来到这里时出现了这个问题。

在搜索了一些微软论坛等之后,我发现了以下对我有用的解决方案:

替换C:\Windows10Upgrade\wimgapi.dll为来自C:\Windows\System32\wimgapi.dll

于 2017-12-21T11:09:39.007 回答
0

只是为了在这里确认答案,我的解决方案是将未加载的 DLL 和随附的 ocx 文件复制到 system32 文件夹,这解决了我的问题。

于 2019-11-18T15:39:29.187 回答