2013-07-10 10 views
9

Sto provando a far funzionare IE BHO su Win8 (anteprima IE10 e IE11) con EPM attivato. Ho trovato alcuni articoli sull'argomento da MS (http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx) ma ancora non forniscono esempi reali su come farlo funzionare. Ho compilato il mio BHO in entrambi i 32 e 64 bit, aggiunto la categoria (CATID_AppContainerCompatible) come indicato nell'articolo, ma ancora non ottengo alcun evento del browser web da IE. Qualcuno può indicare un esempio più dettagliato su come farlo funzionare?IE BHO in EPM (Enhanced Protected Mode)

Ecco come il mio file RGS assomiglia:


HKCR 
{ 
    TestBHO.TestScript.1 = s 'TestScript Class' 
    { 
     CLSID = s '{051FB9EC-79EA-4F8E-9EC2-F1FF4462FB09}' 
    } 
    TestBHO.TestScript = s 'TestScript Class' 
    { 
     CLSID = s '{051FB9EC-79EA-4F8E-9EC2-F1FF4462FB09}' 
     CurVer = s 'TestBHO.TestScript.1' 
    } 
    NoRemove CLSID 
    { 
     ForceRemove {051FB9EC-79EA-4F8E-9EC2-F1FF4462FB09} = s 'TestScript Class' 
     { 
      ProgID = s 'TestBHO.TestScript.1' 
      VersionIndependentProgID = s 'TestBHO.TestScript' 
      ForceRemove 'Programmable' 
      InprocServer32 = s '%MODULE%' 
      { 
       val ThreadingModel = s 'Apartment' 
      } 
      'TypeLib' = s '{2D9CE0FA-2040-4A24-807E-0C0BF4E9ECE7}' 
      'Implemented Categories' = s '' 
      { 
       {59fb2056-d625-48d0-a944-1a85b5ab2640} = s '' 
        { 
        } 
      } 
     } 
    } 
} 

Si noti che in IE di Gestione componenti aggiuntivi Pagina Vedo il mio BHO come Enabled e supporta sia 32bit e 64bit, ma la DLL non è ancora caricato.

+0

Prima di tutto, hai provato a disattivare EPM per confermare che stai ricevendo il contenuto che ti aspetti quando EPM non è attivo? In secondo luogo, la funzione Add-on Manager di IE mostra che il componente aggiuntivo sta caricando? Terzo, in che modo stai guardando per vedere se il tuo componente aggiuntivo sta ricevendo eventi? – EricLaw

+0

1. Sì, il BHO si comporta come previsto quando si disabilita EPM. 2. Secondo il Gestore componenti aggiuntivi lo stato è "Abilitato" e il BHO è di "32 e 64 bit". 3. Ho aggiunto due caselle di messaggi per farmi sapere che ricevo gli eventi che mi aspetto. Uno quando viene chiamato SetSite e l'altro quando viene chiamato DISPID_DOCUMENTCOMPLETE. Di nuovo, entrambi gli eventi sono chiamati come previsto quando EPM NON è abilitato. – Shaish

risposta

5

La chiamata DEFINE_GUID definisce semplicemente la costante di valore GUID nel codice, in realtà non sta facendo nulla per registrare l'oggetto con la categoria del componente COM (che è memorizzata nel registro).

Vedi http://msdn.microsoft.com/en-us/library/windows/desktop/ms692551(v=vs.85).aspx e http://msdn.microsoft.com/en-us/library/windows/desktop/ms694322(v=vs.85).aspx

Si può vedere quali oggetti sono registrati nelle varie categorie utilizzando lo strumento OleView.

Inoltre, assicurarsi di posizionare la DLL di BHO con una cartella leggibile da AppContainer (ad esempio una sottocartella della cartella \ Programmi \). Se non si riesce a farlo, la DLL non verrà caricata dall'istanza di IE in modalità protetta avanzata.

+0

Sì, ho capito che devo registrare il mio oggetto in quella categoria. Vedere la mia domanda originale su come il mio file rgs è simile. Forse ho capito questo sbagliato? (Non ho mai lavorato con le categorie di componenti COM). Inoltre mi sono assicurato che il mio BHO si trovi nella cartella "LocalLow". Era questa la tua intenzione? E un'altra domanda, c'è un motivo per cui ATL non funzionerà con questo? – Shaish

+0

Come ho detto in email, la tua DLL funziona correttamente quando viene inserita nella cartella Programmi. – EricLaw

+0

@Shaish Hai risolto il problema? Aggiungendo le "Categorie implementate" come hai fatto, e inserendo le mie DLL in una sottocartella di "Programmi" funzionava per me. – pyrho