2009-08-26 17 views
12

Sto cercando di eseguire il debug dell'estensione della shell (IContextMenu) in Windows 7 con Visual C++ 2008. Ho impostato DesktopProcess = 1 nel Registro di sistema e ho impostato l'applicazione host su explorer.exe. Ma quando avvio il debugger, avvia explorer.exe e quindi si stacca dal processo. DllMain dell'estensione della shell non viene chiamato.Debug dell'estensione della shell in Windows 7

Lo stesso codice con esattamente le stesse impostazioni lanciati nel debugger senza problemi in Windows XP + Visual C++ 2008.

Ogni pensiero come eseguire il debug l'estensione della shell in Win7?

risposta

7

Provare ad avviare explorer e quindi collegare il debugger ad esso.

2

Si potrebbe provare a inserire una chiamata DebugBreak() nel codice. Questo dovrebbe avviare il debugger just-in-time durante la chiamata e darti un'idea di cosa sta succedendo.

+0

Provato. Fa sì che explorer.exe si riavvii in un ciclo, ho quasi dovuto riavviare forzatamente il mio computer –

0

Si dovrebbe dare un'occhiata a gflags.exe, parte degli strumenti di debug standard sdk. Ha tutte le opzioni necessarie per configurare i flag (globali) per qualsiasi avvio/servizi/heap/pool-tagging/stacktrace's-on-allocation del processo ecc ...

8

Quanto segue dovrebbe funzionare su qualsiasi versione di Windows.

Prima di iniziare - impostare il programma di avvio del progetto di estensione della shell in c: \ windows \ explorer.exe e impostarlo come progetto di avvio.

Poi, ogni volta che si desidera eseguire il debug l'estensione della shell eseguire i seguenti passaggi:

  • Fare clic sulla barra delle applicazioni e premere Alt-F4 - questo porterà l'arresto finestra
  • Press Ctrl Alt-Shift-Escape: questa combinazione chiuderà l'esploratore.
  • Utilizzare Alt-Tab per tornare a Visual Studio e premere F5 - explorer verrà ora avviato con il debugger VS ad esso collegato sin dall'inizio.
  • Al termine, basta interrompere la sessione del debugger. Questo ucciderà l'istanza di explorer debug e avvierà automaticamente una sua normale istanza. Questo sbloccherà anche la DLL di estensione della shell in modo che tu possa ricostruirla.

Ho trovato che questo approccio è il più veloce per iterare rapidamente il ciclo di codice-build-test durante lo sviluppo di estensioni della shell.

Attenzione su Vista e 7 - assicurati di eseguire Visual Studio che utilizzi per il debug in modalità non amministratore (non elevato), in modo che l'explorer venga avviato nella sua modalità normale non elevata.

0

Il debug di Explorer.exe è di solito eccessivo per le estensioni che operano in una vista shell.

Io personalmente uso una piccola app che ho creato per ospitare un'istanza di IExplorerBrowser simile a this example. Se il tuo oggetto IContextMenu non è l'elemento predefinito, puoi semplicemente utilizzare Notepad.exe e la sua finestra di dialogo Apri file ...