c++ 在Windows 7中调试shell扩展

ercv8c1e  于 2023-03-25  发布在  Windows
关注(0)|答案(6)|浏览(143)

我尝试在Windows 7中使用Visual C++ 2008调试shell扩展(IContextMenu)。我在注册表中设置了DesktopProcess=1,并将主机应用程序设置为explorer.exe。但当我启动调试器时,它启动explorer.exe,然后从进程中分离。没有调用shell扩展的DllMain。
在Windows XP + Visual C++ 2008中,具有完全相同设置的相同代码在调试器中启动,没有任何问题。
如何在Win7中调试shell扩展?

sqougxex

sqougxex1#

我发现了一个很好的工作流程,我认为这是在开发shell扩展时快速迭代代码-构建-测试周期的最快方法。
首先准备-将shell扩展项目的启动程序设置为c:\windows\explorer.exe,并将其设置为启动项目。
然后,每当您要调试shell扩展时,请执行以下步骤:

  • 点击任务栏并按Alt-F4 -这将弹出关机对话框
  • 按Ctrl-Alt-Shift-Escape -此组合将关闭资源管理器。
  • 使用Alt-Tab返回到Visual Studio并按F5 -资源管理器现在将从一开始就启动并附带VS调试器。
  • 完成后,只需停止调试器会话。这将杀死资源管理器的调试示例,并自动启动它的正常示例。这还将解锁shell扩展DLL,以便您可以再次构建它。

Vista和7上的警告-确保在非管理员模式(非提升)下运行用于调试的Visual Studio,以便资源管理器在其通常的非提升模式下启动。

vxf3dgd4

vxf3dgd42#

尝试启动资源管理器,然后将调试器附加到它。

weylhg0b

weylhg0b3#

您可以尝试在代码中调用DebugBreak()。这应该会在调用时启动即时调试器,并给予您了解正在发生的事情。

ttvkxqim

ttvkxqim4#

你应该看看gflags.exe,它是标准调试工具sdk的一部分。它有你需要的所有选项来配置(全局)标志,用于任何进程启动/服务/堆/池标记/堆栈跟踪的分配等...

icnyk63a

icnyk63a5#

调试Explorer.exe对于在shell视图中操作的扩展通常是多余的。
我个人使用我做的一个小应用程序,它托管了一个类似于this exampleIExplorerBrowser示例。如果你的IContextMenu项不是默认项,那么你可以使用Notepad.exe和它的打开文件对话框...

4bbkushb

4bbkushb6#

尝试windbg(附加到资源管理器)。在我的情况下,visual studio无法管理它。

相关问题