2009-08-26 76 views
12

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

相同的代码恰好调试器启动,且不会在Windows XP的任何问题,同样的设置+的Visual C++ 2008

任何思考如何调试在Win7的外壳扩展?

回答

7

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

2

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

+0

刚刚尝试过。它导致explorer.exe在一个循环中重新启动,我几乎必须强制重新启动我的电脑 – 2016-01-26 15:35:55

0

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

8

以下应该适用于任何Windows版本。

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

然后,每当你想调试外壳扩展执行以下步骤:

  • 单击任务栏,并按下Alt + F4上 - 这将弹出关机对话框
  • 按Ctrl- Alt-Shift-Escape - 这个组合将关闭浏览器。
  • 使用Alt-Tab返回到Visual Studio并按下F5 - Explorer将立即启动,附带的VS调试器将从头开始。
  • 完成后,停止调试器会话。这将杀死已调试的资源管理器实例,并会自动启动它的一个正常实例。这也将解锁外壳扩展DLL,以便您可以再次构建它。

我发现这种方法是开发shell扩展时快速迭代代码构建测试循环中最快的方法。

关于Vista和7的警告 - 一定要运行用于在非管理员模式(非升级)下进行调试的Visual Studio,以便资源管理器以其通常的非升级模式启动。

0

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

我个人使用一个小应用程序,我创建了一个类似于this exampleIExplorerBrowser的实例。如果您的IContextMenu项目不是默认项目,那么您可以使用Notepad.exe及其打开的文件对话框...