在Windows 7中调试shell扩展

时间:2009-08-26 01:16:45

标签: c++ debugging windows-7 shell-extensions

我正在尝试使用Visual C ++ 2008在Windows 7中调试shell扩展(IContextMenu)。我在注册表中设置了DesktopProcess = 1并将主机应用程序设置为explorer.exe。但是当我启动调试器时,它会启动explorer.exe然后从进程中分离。不调用shell扩展的DllMain。

在调试器中启动完全相同设置的相同代码,在Windows XP + Visual C ++ 2008中没有任何问题。

如何在Win7中调试shell扩展?

5 个答案:

答案 0 :(得分:9)

我发现了一个很好的工作流程,我认为这是在开发shell扩展时快速迭代代码构建测试周期的最快方法。以下内容适用于任何Windows版本。

首先准备 - 将shell扩展项目的启动程序设置为c:\ windows \ explorer.exe,并将其设置为启动项目。

然后,每当您想要调试shell扩展时,请执行以下步骤:

  • 单击任务栏并按Alt-F4 - 这将打开关闭对话框
  • 按Ctrl-Alt-Shift-Escape - 此组合将关闭资源管理器。
  • 使用Alt-Tab返回Visual Studio并按F5 - 资源管理器现在将从一开始就使用VS调试器启动。
  • 完成后,只需停止调试器会话即可。这将终止探测器的已调试实例,并且还将自动启动它的正常实例。这也将解锁shell扩展DLL,以便您可以再次构建它。

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

答案 1 :(得分:8)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

调试Explorer.exe对于在shell视图中运行的扩展通常是过度的。

我个人使用了一个小应用程序来托管IExplorerBrowser与[{3}}类似的实例。如果您的IContextMenu项目不是默认项目,那么您可以使用Notepad.exe及其打开文件对话框...