我的可执行文件有问题。我在我的Windows 7 64位开发盒上运行这个c++ 32位可执行文件,它也有所有的微软应用程序(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 -女士赢得核心- com - l1 - 1 - 0. - dll api -女士赢得核心- winrt错误- l1 - 1 - 0. - dll api -女士赢得核心- winrt - l1 - 1 - 0. - dll api -女士赢得核心- winrt robuffer - l1 - 1 - 0. - dll api -女士赢得核心- winrt字符串- l1 - 1 - 0. - dll api -女士赢得shcore -扩展- l1 - 1 - 0. - dll DCOMP.DLL GPSVC.DLL IESHIMS.DLL

我谷歌了一下API-MS-WIN…DLL文件,并发现它们实际上应该已经是Windows 7的一部分(一些网站声称属于Windows 8和Windows Server 2012)。

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

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

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

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

有什么办法解决这个问题吗? 我试图在微软页面上找到合适的下载/修复,但我失败了。


在解决我的问题后,我想报告我发现的东西,但我不能把这个作为答案,因为这个问题已经结束了。

实际上,所有的DLL文件报告丢失的依赖项行走工具,即那些

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

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

在我的情况下,三个OCX文件的注册丢失了,之后一切都很好,但依赖步行者工具仍然列出了所有相同的DLL文件,就像以前一样,即使现在程序运行良好。

它的要点:正如其他人所说,这个工具现在有点过时了,在更新的操作系统上并不总是能正常工作。因此,请睁大眼睛,不要被遗漏的'API-MS-WIN-CORE-COM-L1-1-0.DLL'误导,…问题可能完全出在别处。


当前回答

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

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

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


我敢在这里注入一个新链接:最新支持的Visual c++下载。斯坦因Åsmul, 29.11.2018。

其他回答

在新安装的Windows 7上安装SQL Server Management Studio 2014解决了我们客户端的这个问题。

对于那些来到这里,但有ps问题的人:我的解决方案是卸载mvc++可重新分发的第一个x86和64。然后安装一个适合Windows版本和体系结构(86或64)的软件。

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

一开始我认为这是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,…)Whatever .),因此这个方法不会超过5分钟。

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

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

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

依赖行者在这种情况下误导了我,让我浪费了时间。因此,第一篇文章中“丢失”DLL文件的列表没有帮助,您可能可以忽略它。

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

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

在我的例子中,它不是三个.ocx文件,而是丢失的MySQL连接器DLL文件。在服务器上安装MySQL Connector for . net后,这个问题就消失了。

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