我的可执行文件有问题。我在我的 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”而被误导,......问题可能完全出在其他地方。
此问题与缺少 Visual Studio“可再发行包”有关。根据依赖遍历,缺少哪个并不明显,但我会先尝试与您的编译器版本对应的那个,看看是否运行正常:
我遇到了这个问题,因为我使用的是 Visual Studio 编译器,而不是完整的 Visual Studio 环境。
敢在这里注入一个新的链接:The latest supported Visual C++ downloads。 Stein Åsmul,2018 年 11 月 29 日。
我刚刚使用 MSCVC 2012 解决了 C++ Qt 5 和 Windows 7 64 位的相同问题。
一开始我以为是 MSVC/Windows DLL 文件问题,但正如 BorisP 所说,问题出在我的项目依赖项中。关键是“如何知道 Qt 5 中的项目依赖关系?”。
由于我没有找到任何明确的方法来了解它(Dependency Walker 对我没有多大帮助......),我接下来按照“逆过程”进行操作,时间不超过 5 分钟,避免了很多令人头疼的问题DLL文件依赖:
编译您的项目并将可执行文件放到一个空文件夹中: myproject.exe 尝试执行它,它会检索到一个错误(缺少 DLL 文件...)。现在,将 Qt 中的所有 DLL 文件(在我的情况下它们位于 C:\Qt\Qt5.1.1\5.1.1\msvc2012_64_opengl\bin 中)复制到此文件夹。尝试再次执行,它可能会正常工作。开始逐步删除并尝试每次您的可执行文件仍然有效,尝试保留最少的必要 DLL 文件。
当您在同一个文件夹中拥有所有 DLL 文件时,更容易找到其中哪些是无效的(XML、WebKit ......无论什么......),因此这种方法不会花费超过五分钟的时间。
windeployqt
工具,例如 stackoverflow.com/a/33292008/4023446
windeployqt
经常复制不必要的文件。
我刚刚解决了同样的问题。
Dependency Walker 在这种情况下具有误导性,导致我浪费时间。因此,第一篇文章中“丢失”的 DLL 文件列表没有帮助,您可以忽略它。
解决方案是找到您的项目正在调用的引用,并检查它们是否真的安装在服务器上。
@Ben Brammer,缺少哪三个 .ocx 文件并不重要,因为它们仅在 Leo T Abraham 的项目中丢失。您的项目可能会调用其他 DLL 文件。
就我而言,不是三个 .ocx 文件,而是缺少 MySQL 连接器 DLL 文件。在服务器上安装 MySQL Connector for .NET 后,问题消失了。
因此,简而言之,解决方案是:检查您的所有项目引用是否都在那里。
如前所述,DCOMP 是 VC++ 可再发行组件(实现 OpenMP 运行时)的一部分,并且是唯一真正缺失的组件。其余均为虚假报道。
具体来说,API-MS-WIN-XXXX.DLL 是 API 集 - essentially, an extra level of call indirection 从 Windows 7 开始逐渐引入。 Dependency Walker 开发似乎在此之前很久就停止了,并且无法正确处理 API 集。
所以那里没有什么可担心的。你不会再错过任何东西了。
找到真正需要的丢失的 DLL 文件(如果这确实是问题)的更好替代方法是运行 Process Monitor 并从失败中退后一步,在所有系统路径中搜索特定 DLL 文件的失败探测序列.
我也遇到了这个问题,但这里似乎是一个常见的线程,我在网上其他地方看到的解决方案是“[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 文件添加到我们的产品安装中。有关详细信息,请参阅 Update for Universal C Runtime in Windows,其中描述了 Visual Studio 2015 导致的这些依赖项的添加,并提供了适用于各种 Windows 平台的下载;另请参阅描述 CRT 库的重新设计的 Introducing the Universal CRT。特别感兴趣的是标题为分发使用通用 CRT 的软件部分下的第 6 项:
2015 年 9 月 11 日更新:支持通用 CRT 的应用本地部署。要获取用于应用本地部署的二进制文件,请安装适用于 Windows 10 的 Windows 软件开发工具包 (SDK)。这些二进制文件将安装到 C:\Program Files (x86)\Windows Kits\10\Redist\ucrt。您将需要使用您的应用程序复制所有 DLL(请注意,所需的 DLL 文件集在不同版本的 Windows 上是不同的,因此您必须包含所有 DLL 文件才能使您的程序在所有支持的版本上运行窗口)。
API-MS-WIN-*.dll
这个贡献并没有真正回答最初的问题,但考虑到这个线程的命中率,我假设有很多人在处理找不到 API-MS-WIN-CORE-库的问题。
我能够通过简单地更新 Visual Studio 来解决我的应用程序拒绝以错误消息启动 API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL 的问题。
我不认为我的构建环境(Windows 7 Pro SP1、Visual Studio Ultimate 2012)完全搞砸了,它适用于我的大多数项目。但在一些非常具体的情况下,我收到了错误消息(见下文)。
在 updating Visual Studio 11 从最初的 CD 版本(我忘了查找版本号)到版本 11.0.61030.00 更新 4 之后,损坏的项目再次运行。
https://i.stack.imgur.com/UOf2o.png
这为我解决了这个问题:
如果您已安装 Visual Studio 2010 可再发行软件包,请卸载它,然后安装 Microsoft Windows 7 SDK。
我解决了这个问题。当我注册 OCX 文件时,我使用以管理员身份执行的命令窗口运行它。
我有同样的问题。在网上花了几个小时搜索后,我找到了适合我的解决方案。
我将文件 combase.dll 文件 (C:\Windows\System32) 复制到发布文件夹,它解决了问题。
在尝试全新的 Windows 7 OEM 安装并升级到 Windows 10 后,我来到这里时出现了这个问题。
在搜索了一些微软论坛等之后,我发现了以下对我有用的解决方案:
将 C:\Windows10Upgrade\wimgapi.dll 替换为 C:\Windows\System32\wimgapi.dll 中的那个
我建议还检查当前使用了多少内存。
事实证明,无法找到这些 DLL 文件是尝试在 Visual Studio 中运行程序(运行或调试)时出现的第一个症状。
经过半个多小时的头疼,搜索网络,运行 Process Monitor 和 Task Manager 并依赖,一个完全不同的程序从一开始就一直在运行,报告“内存不足;尝试停止一些程序”或类似的。在杀死 Firefox、Thunderbird、Process Monitor 和依赖后,一切都恢复了。
只是为了在这里确认答案,我的解决方案是将未加载的 DLL 和随附的 ocx 文件复制到 system32 文件夹,这解决了我的问题。
不定期副业成功案例分享