无法在动态链接库 msvcrt.dll 中找到过程入口点 _except_handler4_common

Posted

技术标签:

【中文标题】无法在动态链接库 msvcrt.dll 中找到过程入口点 _except_handler4_common【英文标题】:The procedure entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll 【发布时间】:2013-01-22 21:26:09 【问题描述】:

我正在使用“Microsoft Visual Studio”来处理“MFC 应用程序”。

我正在使用“Installshield”为此应用程序创建安装文件。

我得到一个“setup.exe”文件。

如果我在“Windows XP 32 位”机器上运行此安装程序,安装将正常结束。

然而,当我尝试启动已安装的程序时,我收到以下消息:

"The procedure entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll."

在调试模式下,我找不到错误发生的那一刻,因为无论我在代码中放置什么断点,消息都会在到达断点之前出现,我猜是在程序执行的一开始......

注意:它适用于 Vista 32 位和 7 位 64 位。

似乎很多人确实有同样的问题,但我找不到自己的解决方案。

你能帮忙吗? 谢谢。

【问题讨论】:

Msvcrt.dll 15 年前被 VC++ 项目使用。除非您在虚拟机中运行它们,否则您将无法再使用它们。您需要重建这些项目。 他可能最好通过重构和重建来服务,但是,具有该导出函数的 DLL 可以在 Windows 8 的库存安装中找到。有关更多详细信息,请参阅下面的答案。 【参考方案1】:

您的程序具有在 Windows XP 上无法满足的依赖项。您可以尝试使用 Dependency Walker 来识别它,或者您可以检查已知的限制。例如,Visual Studio 2012 不支持 Windows XP,直到更新 1 和构建选项更改 - 你正在使用它吗?

【讨论】:

非常感谢您的回答。在这种情况下,我的同事仍在使用 MSVisual 2005。【参考方案2】:

欢迎来到 DLL 地狱和应用程序依赖分析的世界。

我在我的 Win8 机器上的 SYSWOW64(32 位 System32 文件夹)中找到了版本 7.0.9200.16384 的 DLL。使用Dependency Walker查看它,我可以看到它实际上导出了您正在寻找的功能。

我还在我的 InstallShield 机器上看到了一个名为 MSVCRT.MSM 的合并模块,它重新分发了此文件的 6.00.8797.0 版本。但是,当我使用 Dependency Walker 查看它时,我发现它具有导出的函数 _except_handler2 和 _except_handler_3 但没有 _except_handler_4_common。

因此,您需要一个更新的 DLL,而该合并模块对您没有帮助。微软曾经有一个很酷的网站,叫做 DLL Help Database,它告诉你一个文件的所有版本以及发布它们的内容,但遗憾的是他们把它杀了。

顺便说一句,我也可以看到这个 DLL 这些天是随 Windows 一起安装的。视窗XP?我不太确定,因为我必须启动虚拟机并查看。

几个可能的解决方案:

    找出 Windows 的 SP 或 Hotfix 解决了这个问题,并使其成为您的 MSI 的依赖项。

    从 Win 8 机器获取 DLL 并将其添加到您的 INSTALLDIR 并私下部署。

最后一点。这可能是由于 Windows XP 的版本带有旧版本的 DLL(相关知识库文章说确实如此),或者是第三方应用程序破坏了导致问题的 DLL。这里需要更多的研究。

【讨论】:

非常感谢您的回答。我还没有可用的 Win 8 机器。你能告诉我是否可以在网上某个地方下载一个“msvcrt.dll”,它导出“_except_handler_4_common”函数(一个在 XP 32 位下工作的 DLL)。 什么意思?我们的一些客户和潜在客户仍然拥有 Win XP 32 位机器。我们需要应用程序。也可以在 XP 32 位上工作... 我的意思是从 Vista 机器上获取 DLL,然后按照我的回答在 XP 机器上试用。 我已经尝试了几个 dll,包括来自 Vista 的 dll,但均未成功。我可以从我的 Microsoft 帐户下载特定的 dll 吗?您的 dll 仅适用于 64 位机器,不是吗? 我已经告诉了你我能做的,你可以从这里调查。【参考方案3】:

这个问题存在于每个需要 Windows 7 或 8 或 vista 但在 windows xp 中运行的软件或游戏。因此,如果您想恢复或启动您的程序,您需要根据程序的系统要求将您的 windows 升级到 7 或 8 或 vista。 希望它有帮助 谢谢

【讨论】:

-1:我确实在 Windows 7 下编译了在 Windows XP 上运行良好的软件。如果我可以将 -2 作为升级建议,我会这样做:在大多数情况下(但在家里玩弄),这不是一个选择。虚拟机可能是更好的建议。【参考方案4】:

在过去的 8 个小时里,我一直在挑选我的代码,但出现了完全相同的错误,结果证明这是我的应用程序中的一行代码,特别是检查操作系统中的 IPv6 支持:

conf.IPv6Disabled = !(Socket.OSSupportsIPv6);
我把那行注释掉了,瞧,错误消失了。

【讨论】:

这应该是一个答案吗? op是否需要评论与您完全相同的行?我们怎么知道 conf 和 Socket 指的是什么?这是没有意义的 是的,它应该是一个答案——在 windows xp 中检查套接字是否支持 ipv6 的调用会引发这个确切的错误。 "Socket.OSSupportsIPv6" 是 .net 框架中的布尔值。【参考方案5】:

我建议您首先尝试安装 MSVC Redist 2008 版。该版本确实包含缺失功能的实现。

【讨论】:

【参考方案6】:

问题可能是因为您可能在 Win XP 上使用了损坏的 DirectX 版本。它也发生在我身上,因为我随机下载了一个损坏并导致这些的 DirectX 设置。我所做的解决方案是我从 C:Windows/System32 中删除了所有与 directX 相关的文件,同时从添加/删除程序中删除了 directX,并从 regedit 中完全删除了整个注册表项。 Local_machine/software/microsoft/DirectX...我当时在网上找到了DirectX 9的原始值和键,并制作了一个新的注册表键。

DirectX 文件夹曾经完全重新回到 regedit,它在 dxdiag 中显示安装了 directX。

如果您在游戏中遇到崩溃,建议您下载 .NET Framework 3.5 Service Pack 1,然后在您的 PC 上进行备份(如果您没有像我一样使用 nVIDIA 显卡,我使用 ATI Radeon ) 并下载 nVIDIA PhysX 系统软件驱动程序,看看它是否有效。 (只有在使用 Win XP 时,您才需要 nVIDIA phydX 驱动程序才能运行此游戏而不会崩溃,在 Win 7 上不应该遇到此问题)如果驱动程序搞砸了您的 PC(nVIDIA PhysX 之一),您将能够恢复您的旧 PC在这些驱动程序之前运行(如果您备份了您的 PC,我建议使用 Acronis Boot 进行备份)这意味着如果您无法在您的设备上安装 nVIDIA PhysX,您将完全不走运,例如,ATI 显卡Windows XP,因为没有 nvidia physx,在 Win XP 上,Metro 不会运行,而在 Win 7 / Vista / 8 上应该。

【讨论】:

我没有注意到这不是关于地铁的,所以忽略答案中的最后几行,它是关于地铁 2033 的。但如果你可能想玩这个游戏,剩下的几行在答案将有助于您顺利运行游戏。【参考方案7】:

这篇文章很旧,但我想留下我的解决方案,因为这个问题对我来说是地狱。我的 python 应用程序适用于 Linux、Win7、8 和 10,但 WinXP 拒绝使用该消息。

我使用 py2exe 来获取可执行文件,它会将一些 DLL 与 exe 文件一起放置。

从 exe 目录中删除一些 dll 是使应用程序在 XP 中运行并继续在其他系统中运行的唯一方法:

[ "POWRPROF.dll","IPHLPAPI.DLL","USP10.DLL", "DNSAPI.DLL" ]

还将“Microsoft.VC90.CRT”目录与 exe 文件、清单和 DLL 文件一起分发。

我希望这对某人有用,因为我花了几个星期才弄明白。

(我知道 OP 没有使用 python,但错误是一样的)

【讨论】:

【参考方案8】:

我刚刚安装了最新的 VS 2017 并遇到了同样的问题。我搜索了所有内容但找不到任何解决方案,所以我自己定义了它:

extern "C" int _except_handler4_common() 
    return 0; // whatever, I don't know what this is

【讨论】:

以上是关于无法在动态链接库 msvcrt.dll 中找到过程入口点 _except_handler4_common的主要内容,如果未能解决你的问题,请参考以下文章

求助ffmpeg.exe在windows自带的cmd下运行不了。显示无法定位程序输入点strncpy_s于动态链接库msvcrt.dll

打开360浏览器时会弹出个框无法定位程序输入点_ftol2于动态链接库msvct.dll上 ,用搜狗浏览器也这样,求解

为甚么我玩lol时总是出来无法连接动态数据库

platform模块和ctypes模块

VS2017里使用mysql出现错误,无法定位序数3283...

WINDOWS资源管理器已停止工作,故障模块msvcrt.dll?