我的可执行文件有问题。我在我的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'误导,…问题可能完全出在别处。


当前回答

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

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

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

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

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

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

其他回答

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

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

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


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

我刚刚用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分钟。

我也遇到了这个问题,但解决方案似乎是一个常见的线程,在这里,我在网络上看到的其他地方,是“[重新]安装可重新分发的包”。然而,对我来说,这并不管用,因为当运行我们产品的安装程序(安装可重分发包)来测试我们闪闪发光的新Visual Studio 2015版本时,问题出现了。

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

Installing on Windows 10 worked fine, but installing on Windows 7 required adding these DLL files to our product install. For more information, see Update for Universal C Runtime in Windows which describes the addition of these dependencies caused by Visual Studio 2015 and provides downloads for various Windows platforms; also see Introducing the Universal CRT which describes the redesign of the CRT libraries. Of particular interest is item 6 under the section titled Distributing Software that uses the Universal CRT:

Updated September 11, 2015: App-local deployment of the Universal CRT is supported. To obtain the binaries for app-local deployment, install the Windows Software Development Kit (SDK) for Windows 10. The binaries will be installed to C:\Program Files (x86)\Windows Kits\10\Redist\ucrt. You will need to copy all of the DLLs with your app (note that the set of DLL files are necessary is different on different versions of Windows, so you must include all of the DLL files in order for your program to run on all supported versions of Windows).

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

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

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

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

将C:\Windows10Upgrade\wimgapi.dll替换为C:\ windows \ system32 \wimgapi.dll中的文件