13

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

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

任何想法如何在 Win7 中调试 shell 扩展?

4

5 回答 5

9

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

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

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

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

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

于 2012-06-07T07:25:49.797 回答
8

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

于 2009-09-10T15:06:23.707 回答
2

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

于 2009-09-29T08:26:30.100 回答
0

您应该查看 gflags.exe,它是标准调试工具 sdk 的一部分。它具有为任何进程启动/服务/堆/池标记/stacktrace's-on-allocation 等配置(全局)标志所需的所有选项......

于 2009-09-30T11:29:51.527 回答
0

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

我个人使用我制作的一个小应用程序,该应用程序托管一个类似于此示例的IExplorerBrowser实例。如果您的 IContextMenu 项目不是默认项目,那么您可以只使用 Notepad.exe 及其打开文件对话框...

于 2017-01-02T04:18:16.713 回答