如何编程实现扩展右键菜单之三:调试Shell扩展DLL

来源:互联网 发布:大连新港716火灾知乎 编辑:程序博客网 时间:2024/05/15 10:54

在前两篇教程中,我们已经学会了如何在资源管理器的右键菜单中增加自己的菜单项,及如何将菜单分组为子菜单。在学习过程中,读者可能注意到,在VC中编译成功后,此时我们的扩展DLL已自动注册到系统中,此时Windows资源管理器将自动加载此文件,之后重新编译时,会提示该DLL文件正在被使用,无法覆盖,导致编译失败。本文将介绍如何解决这一问题。

首先,需修改如下注册表项:

HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Explorer/AlwaysUnloadDLL

将该项的默认值修改为"1",该值指示资源管理器更频繁的释放不再使用的扩展DLL。

此外,在NT版的Windows中,还需在

HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer

下创建一个名为DesktopProcess、类型为DWORD、值为1的参数。这个参数将每一个新打开的资源管理器运行在独立的进程中,这样我们就可以在项目设置中将我们的扩增DLL的调试进程设为c:/windows/explorer.exe,运行调试器进行调试。

如此设置后,我们如果发现因资源管理器载入了扩展DLL而导致无法编译,可以将此DLL反注册,然后关闭资源管理器窗口,过一会儿(最多2到3分钟)就可以编译覆盖了。如果这样还不行,则只能反注册扩展DLL后,注销当前用户,然后重新登录,保证资源管理器不载入我们的DLL。

 

原创粉丝点击