2009-08-26 77 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及其打開的文件對話框...