4

我正在使用“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 位。

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

你能帮我吗?谢谢你。

4

8 回答 8

5

欢迎来到 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 帮助数据库,它告诉你一个文件的所有版本以及发布它们的内容,但遗憾的是他们杀死了它。

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

几个可能的解决方案:

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

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

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

于 2013-02-07T17:07:45.400 回答
1

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

于 2014-01-02T09:50:02.333 回答
1

这篇文章很旧,但我想留下我的解决方案,因为这个问题对我来说是地狱。我的 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,但错误是一样的)

于 2017-03-02T17:48:29.940 回答
0

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

于 2013-02-07T13:24:36.987 回答
0

问题可能是因为您可能在 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 上应该。

于 2014-12-06T15:19:16.863 回答
0

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

extern "C" int _except_handler4_common() {
    return 0; // whatever, I don't know what this is
}
于 2018-12-04T20:18:53.727 回答
-1

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

conf.IPv6Disabled = !(Socket.OSSupportsIPv6);
  • 我评论了那条线,瞧,错误消失了。
于 2013-07-11T08:28:26.473 回答
-2

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

于 2013-03-28T15:33:32.987 回答