我正在使用带有此处描述代码的 dll 代理,但遇到了很多麻烦。
首先,我在 Windows 7 上使用 VS2012,目标是在 Windows XP 上。所以我需要:
- 在目标计算机上安装 VCRedist(如果可能的话,我想解决这个问题,建议将非常有用)
- 将我的 VS 更新到至少更新 1(我已经更新到更新 4)以获得 XP 编译支持。
我做了这两个,错误已经改变。但是当程序启动时我仍然收到这个错误:
The application failed to initialize properly (0xc000007b)
它不会运行。
我使用的 DLL 代理基本上是代码项目文章中的默认示例。我在 DllMain 上添加了一个消息框和一个日志文件,但它没有显示,这意味着 dll 甚至没有加载 - 但我不明白为什么。
我该如何调试?这是编译配置问题吗?
编辑:我写了一个测试程序,用我的 dll 代理调用 LoadLibrary,它工作正常。所以我认为这不是 CRT dll 的事情。无论如何,这是我用 /MT 编译后来自 WinDbg 的信息(对不起,我不得不删除公司和应用程序名称):
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
CommandLine: "C:\Program Files\AppName\AppName.exe"
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 12400000 12bdb000 AppName.exe
ModLoad: 7c900000 7c9b2000 ntdll.dll
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll
ModLoad: 60000000 6006d000 C:\WINDOWS\cdmapi32.dll
ModLoad: 73dd0000 73ece000 C:\WINDOWS\system32\MFC42.DLL
ModLoad: 77c10000 77c68000 C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77f10000 77f59000 C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000 C:\WINDOWS\system32\USER32.dll
ModLoad: 77dd0000 77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000 C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000 C:\WINDOWS\system32\Secur32.dll
ModLoad: 5d090000 5d12a000 C:\WINDOWS\system32\COMCTL32.dll
ModLoad: 774e0000 7761e000 C:\WINDOWS\system32\ole32.dll
ModLoad: 77120000 771ab000 C:\WINDOWS\system32\OLEAUT32.dll
ModLoad: 76080000 760e5000 C:\WINDOWS\system32\MSVCP60.dll
ModLoad: 77c00000 77c08000 C:\WINDOWS\system32\VERSION.dll
ModLoad: 76b40000 76b6d000 C:\WINDOWS\system32\WINMM.dll
ModLoad: 76390000 763ad000 C:\WINDOWS\system32\IMM32.dll
ModLoad: 76380000 76385000 C:\WINDOWS\system32\MSIMG32.dll
ModLoad: 763b0000 763f9000 C:\WINDOWS\system32\comdlg32.dll
ModLoad: 7c9c0000 7d1d7000 C:\WINDOWS\system32\SHELL32.dll
ModLoad: 77f60000 77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 73000000 73026000 C:\WINDOWS\system32\WINSPOOL.DRV
ModLoad: 00340000 00356000 C:\Program Files\AppName\DllName.dll
(dc8.68c): Unknown exception - code c000007b (first chance)
(dc8.68c): Unknown exception - code c000007b (!!! second chance !!!)
eax=0012fc54 ebx=00000000 ecx=0012fc80 edx=7c90e514 esi=7ffdc000 edi=c000007b
eip=7c9673be esp=0012fc54 ebp=0012fca4 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!RtlRaiseStatus+0x26:
7c9673be c9 leave
我检查了 procmon,这是最后几行:
9:56:07.8699734 PM AppName.exe 496 QueryOpen C:\Program Files\AppName\DllName.dll SUCCESS CreationTime: 8/31/2014 2:14:39 PM, LastAccessTime: 8/31/2014 9:55:22 PM, LastWriteTime: 8/31/2014 7:14:29 PM, ChangeTime: 8/31/2014 7:14:29 PM, AllocationSize: 73,728, EndOfFile: 70,656, FileAttributes: A
9:56:07.8704646 PM AppName.exe 496 QueryOpen C:\Program Files\AppName\DllName.dll SUCCESS CreationTime: 8/31/2014 2:14:39 PM, LastAccessTime: 8/31/2014 9:55:22 PM, LastWriteTime: 8/31/2014 7:14:29 PM, ChangeTime: 8/31/2014 7:14:29 PM, AllocationSize: 73,728, EndOfFile: 70,656, FileAttributes: A
9:56:07.8709551 PM AppName.exe 496 CreateFile C:\Program Files\AppName\DllName.dll SUCCESS Desired Access: Execute/Traverse, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a, OpenResult: Opened
9:56:07.8713057 PM AppName.exe 496 CreateFileMapping C:\Program Files\AppName\DllName.dll SUCCESS SyncType: SyncTypeCreateSection, PageProtection: PAGE_EXECUTE
9:56:07.8714685 PM AppName.exe 496 CreateFileMapping C:\Program Files\AppName\DllName.dll SUCCESS SyncType: SyncTypeOther
9:56:07.8718270 PM AppName.exe 496 CloseFile C:\Program Files\AppName\DllName.dll SUCCESS
9:56:07.8724308 PM AppName.exe 496 Load Image C:\Program Files\AppName\DllName.dll SUCCESS Image Base: 0x340000, Image Size: 0x16000
9:56:07.8737372 PM AppName.exe 496 CreateFile C:\Program Files\AppName\DllName.dll.2.Manifest NAME NOT FOUND Desired Access: Generic Read/Execute, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a
9:56:07.8746961 PM AppName.exe 496 CreateFile C:\Program Files\AppName\DllName.dll.2.Config NAME NOT FOUND Desired Access: Generic Read/Execute, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, AllocationSize: n/a
9:56:09.0143355 PM AppName.exe 496 Thread Exit SUCCESS Thread ID: 4064, User Time: 0.0000000, Kernel Time: 0.0468750
9:56:09.0151822 PM AppName.exe 496 Process Exit SUCCESS Exit Status: -1073741701, User Time: 0.0156250 seconds, Kernel Time: 0.0468750 seconds, Private Bytes: 2,572,288, Peak Private Bytes: 2,588,672, Working Set: 1,761,280, Peak Working Set: 1,765,376
9:56:09.0158711 PM AppName.exe 496 CloseFile C:\Program Files\AppName SUCCESS
它似乎无法搜索清单和配置文件。这是一个问题吗?