在Windows 7中调试Shell扩展

13

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

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

有什么想法可以在Win7中调试Shell扩展吗?

5个回答

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,以使资源管理器以其通常的非提升模式启动。

如何设置启动程序?在单击项目/解决方案后,是否可以在 VS 中将其设置为启动项目? - Baris LaPaz

8
尝试先启动资源管理器,然后再将调试器附加到它上面。

2

你可以尝试在代码中加入DebugBreak()调用。这样会在调用处启动即时调试器,并让你了解发生了什么。


刚试了一下,它导致资源管理器(explorer.exe)在一个循环中重启,我差点不得不强制重启我的电脑。 - Thomas Levesque

0

调试Explorer.exe对于在shell视图中操作的扩展来说通常是过度的。

我个人使用一个我制作的小应用程序,它托管了一个类似IExplorerBrowser的实例,类似于this example。如果您的IContextMenu项不是默认项,则可以使用Notepad.exe及其"打开文件"对话框...


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接