Ric*_*Liu 0 c++ dll windows-server-2008-r2
是否有人对以下崩溃的含义或调试方法有任何想法?
错误的应用程序名称:MyServer.exe,版本:0.0.0.0,时间戳:0x53d885f1
故障模块名称:WS2_32.dll_unloaded,版本:0.0.0.0,时间戳:0x4ce7ca25
异常代码:0xc0000005
故障偏移量:0x000007fefe67a0af
故障进程ID:0xcbc
错误的应用程序开始时间:0x01cfabbc216f52c2
错误的应用程序路径:[Path] /MyServer.exe
错误的模块路径:WS2_32.dll
报告ID:61efadce-17af-11e4-8301-001517d9c80a
当我将我的exe(非托管C ++)与托管C ++ dll(通过dllexport公开)链接时,就会发生这种情况。从windbg看来,崩溃是在加载所有模块之后立即发生的,甚至没有发生过:
(51d4.5e50):访问冲突-代码c0000005(第一次机会)在任何异常处理之前都会报告第一次机会异常。可能会预期并处理此异常。+ 0x1a0af:000007fe fe67a0af ?? ???
0:000> kP
Child-SP RetAddr Call Site
000000000020dc80 00000000 002a2700 <Unloaded_WS2_32.dll>+0x1a0af
000000000020dc88 00000000 002a2701 0x2a2700
000000000020dc90 00000000`00000000 0x2a2701
托管的C ++ dll是一个DNS库,它最终在下面调用WS2_32.dll。
奇怪的是,另一个使用相同托管C ++ dll的exe可以正常运行,并且我没有发现源/头文件之间的明显差异会导致这种不同的行为。如果我注释掉了(1)引用此托管dll的代码,或(2)我的exe文件中除引用托管dll的代码之外的所有其他内容,那么也不会发生崩溃。(2)工作的事实告诉我,至少所有dll依赖项都应该在工作目录中。
仅在Windows Server 2008 R2上会发生这种情况。我正在使用.Net 4.5。
有人有指针吗?
我有一个类似的问题,涉及一个使用许多DLL的本机应用程序,其中一个被管理。应用程序无法访问main的事实表明DLL的DllMain返回FALSE。但是,尽管事件查看器中的日志显示的错误消息与OP提供的错误消息相似,但我不知道是哪一个。对我来说幸运的是,该应用程序仅在新建PC上失败。为尝试调试问题而执行的操作:
HKLM\Software\Microsoft\SQMClient\Windows\CEIPEnable。在工作情况下CEIPEnable为0。在失败情况下CEIPEnable为1。这就是nop提到的Windows客户体验改善计划。禁用此功能可以在有故障的计算机上启动应用程序。WSAStartup在其DllMain 中调用的那些DLL(在调试器下运行时)。这确实标记了可疑的DLL(以及其他)。此行为与Richard指出的MSDN的建议相反。进一步的观察:
我希望有人觉得这个答案有用。如果没有nop的答案,我不会解决我的问题。