我正在使用“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位和Seven 64位。
看来很多人都有同样的问题,但我找不到自己的解决方案。
你能帮忙吗? 谢谢。答案 0 :(得分:5)
欢迎来到DLL地狱和应用程序依赖性分析的世界。
我在SYSWOW64(32位System32文件夹)中的Win8机器上找到了DLL,版本为7.0.9200.16384。使用Dependency Walker查看它我可以看到它实际上导出了您正在寻找的功能。
我还在InstallShield机器上看到一个名为MSVCRT.MSM的合并模块,它重新分发了该文件的版本6.00.8797.0。但是当我使用Dependency Walker查看它时,我看到它有导出的函数_except_handler2和_except_handler_3但不是_except_handler_4_common。
因此,您需要一个较新的DLL,该合并模块将无法帮助您。微软曾经有一个名为DLL帮助数据库的酷网站,它告诉你文件的所有版本以及它们发送的内容但遗憾的是它们将其杀死了。
顺便说一下,我还可以看到这个DLL现在已经安装了这个DLL。 Windows XP?我不太确定,因为我必须启动VM并查看。几种可能的决议:
找出Windows的SP或修补程序修复此问题并使其成为您的MSI的依赖项。
从Win 8计算机中获取DLL并将其添加到您的INSTALLDIR并私下部署它。
最后一点说明。这可能是由于Windows XP版本附带旧版本的DLL(相关知识库文章说它确实存在)或第三方应用程序破坏了导致问题的DLL。这里需要进行更多的研究。
答案 1 :(得分:1)
我建议您首先尝试安装MSVC Redist版本2008.那个版本包括缺少函数的实现。
答案 2 :(得分: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,但错误是一样的)
答案 3 :(得分:0)
您的程序具有在Windows XP上不满足的依赖性。您可以尝试使用Dependency Walker来识别它,或者您可以检查已知的限制。例如,Visual Studio 2012在更新1和构建选项更改之前不支持Windows XP - 您正在使用的是什么?
答案 4 :(得分:0)
问题可能是因为您可能在Win XP上使用了损坏的DirectX版本。它也发生在我身上,因为我随机下载了一个已损坏的DirectX设置并导致了这些设置。我做的解决方案是删除了所有与C中的directX有关的文件:Windows / System32,从add / remove程序中删除了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系统软件驱动程序,看看它是否有效。 (你需要nVIDIA phydX驱动程序来运行这个游戏而不会崩溃只有你使用Win XP,在Win 7上不会遇到的问题)如果驱动程序搞砸了你的PC(nVIDIA PhysX一个)你将能够恢复你的旧PC在那些驱动程序之前运行(如果您备份了PC,我建议使用Acronis Boot进行备份)这意味着如果您无法获得nVIDIA PhysX,例如ATI图形,那么您将完全失去运气Windows XP,因为没有nvidia physx,在Win XP上,Metro不会运行,而在Win 7 / Vista / 8上它应该运行。
答案 5 :(得分:0)
我刚刚安装了最新的VS 2017,并且遇到了同样的问题。我搜索了所有内容,但找不到任何解决方案,所以我自己定义了它:
extern "C" int _except_handler4_common() {
return 0; // whatever, I don't know what this is
}
答案 6 :(得分:-1)
我花了最后8个小时选择我的代码与此完全相同的错误,结果是我的应用程序中的一行代码,特别是检查操作系统中的IPv6支持:
conf.IPv6Disabled = !(Socket.OSSupportsIPv6);
答案 7 :(得分:-2)
这个问题一直存在于需要Windows 7或8或Vista的每个软件或游戏中,但是会被运行到windows xp中。因此,如果要恢复或启动程序,则需要根据程序的系统要求将窗口升级到7或8或vista。 希望它是有帮助的 致谢