2013-07-10 4 views
9

Ich versuche, mein IE BHO mit Win8 (IE10 und IE11 Vorschau) mit EPM eingeschaltet zu machen. Ich habe ein paar Artikel über das Thema von MS gefunden (http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addons-cookies-metro-desktop.aspx), aber sie bieten noch keine konkreten Beispiele, wie dies funktioniert. Ich habe meine BHO in 32 und 64 Bit kompiliert, hinzugefügt die Kategorie (CATID_AppContainerCompatible) wie in dem Artikel angegeben, aber immer noch bekomme ich keine Web-Browser-Ereignisse von IE. Kann jemand auf ein ausführlicheres Beispiel hinweisen, wie dies funktioniert?IE BHO in EPM (Enhanced Protected Mode)

Hier ist, wie meine rgs-Datei wie folgt aussieht:


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 '' 
        { 
        } 
      } 
     } 
    } 
} 

Beachten Sie, dass Manage in IE-Add-ons Seite I mein BHO sehen wie Aktiviert und unterstützt sowohl 32-Bit- und 64-Bit, aber die DLL ist nicht einmal geladen.

+0

Zunächst einmal, haben Sie versucht, EPM zu deaktivieren, um zu bestätigen, dass Sie den erwarteten Inhalt erhalten, wenn EPM nicht aktiviert ist? Zweitens, zeigt der Add-On-Manager von IE an, dass Ihr Add-On geladen wird? Drittens, wie genau beobachten Sie, ob Ihr Add-on Ereignisse bekommt? – EricLaw

+0

1. Ja, das BHO verhält sich beim Deaktivieren von EPM wie erwartet. 2. Laut dem Add-On Manager ist der Status "Enabled" und das BHO ist "32 AND 64 bit". 3. Ich habe zwei Nachrichtenfelder hinzugefügt, um mich wissen zu lassen, dass ich die Ereignisse erhalte, die ich erwarte. Eine, wenn SetSite aufgerufen wird und die andere, wenn DISPID_DOCUMENTCOMPLETE aufgerufen wird. Beide Ereignisse werden wie erwartet aufgerufen, wenn EPM NICHT aktiviert ist. – Shaish

Antwort

5

Der DEFINE_GUID-Aufruf definiert einfach die GUID-Wertkonstante in Ihrem Code, er tut nichts, um Ihr Objekt mit der COM-Komponentenkategorie (die in der Registrierung gespeichert ist) zu registrieren.

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

können Sie sehen, welche Objekte in den verschiedenen Kategorien registriert werden mit dem OLEView-Tool.

Stellen Sie außerdem sicher, dass Sie die BHO-DLL mit einem durch AppContainer lesbaren Ordner (z. B. einem Unterordner des Ordners \ Programme \) belegen. Wenn Sie dies nicht tun, wird Ihre DLL nicht von der IE-Instanz im erweiterten geschützten Modus geladen.

+0

Ja Ich verstehe, dass ich mein Objekt zu dieser Kategorie registrieren muss. Siehe meine ursprüngliche Frage, wie meine Rgs-Datei aussieht. Vielleicht habe ich das falsch verstanden? (Ich habe nie mit COM-Komponentenkategorien gearbeitet). Ich habe auch sichergestellt, dass mein BHO unter dem Ordner "LocalLow" befindet. War das deine Absicht? Und eine andere Frage, gibt es einen Grund, warum ATL nicht damit arbeiten wird? – Shaish

+0

Wie ich in E-Mail gesagt habe, funktioniert Ihre DLL gut, wenn sie in den Ordner Programme gestellt wird. – EricLaw

+0

@Shaish Hast du dein Problem behoben? Das Hinzufügen der "Implementierten Kategorien", wie Sie es taten, und das Setzen meiner DLLs in einen Unterordner von "Programme" funktionierte für mich. – pyrho