13

Visual C ++2008を使用してWindows7でシェル拡張機能(IContextMenu)をデバッグしようとしています。レジストリでDesktopProcess = 1を設定し、ホストアプリをexplorer.exeに設定しました。しかし、デバッガーを起動すると、explorer.exeが起動し、プロセスから切り離されます。シェル拡張のDllMainは呼び出されません。

Windows XP + Visual C ++ 2008で問題なくデバッガーで起動された、まったく同じ設定の同じコード。

Win7でシェル拡張機能をデバッグする方法について何か考えはありますか?

4

5 に答える 5

9

シェル拡張機能を開発するときに、コード-ビルド-テストのサイクルを迅速に繰り返すための最速の方法だと思う素晴らしいワークフローを見つけました。以下は、すべてのWindowsバージョンで機能するはずです。

最初の準備-シェル拡張プロジェクトの起動プログラムをc:\ windows \ explorer.exeに設定し、起動プロジェクトにも設定します。

次に、シェル拡張機能をデバッグするときはいつでも、次の手順を実行します。

  • タスクバーをクリックしてAlt-F4-を押すと、シャットダウンダイアログが表示されます
  • Ctrl-Alt-Shift-Escapeを押します-この組み合わせはエクスプローラーを閉じます。
  • Alt-Tabを使用してVisualStudioに戻り、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

標準のデバッグツールsdkの一部であるgflags.exeを確認する必要があります。プロセスの起動/サービス/ヒープ/プールタグ付け/スタックトレースの割り当て時などの(グローバル)フラグを構成するために必要なすべてのオプションがあります...

于 2009-09-30T11:29:51.527 に答える
0

Explorer.exeのデバッグは、通常、シェルビューで動作する拡張機能にとってはやり過ぎです。

私は個人的に、この例のようなIExplorerBrowserのインスタンスをホストする小さなアプリを使用しています。IContextMenuアイテムがデフォルトのアイテムでない場合は、Notepad.exeとそのファイルを開くダイアログを使用できます...

于 2017-01-02T04:18:16.713 に答える