2016-04-18 26 views
0

Ich schreibe ein Add-on für Internet Explorer 11.Warum meine Add-ons im Internet Explorer "Add-ons verwalten" -Menü anzeigen?

Ich habe bereits guid Variablen hinzugefügt:

[ComVisible(true), Guid("86524891-49EB-4F46-BAE3-C5545B81A671"), ClassInterface(ClassInterfaceType.None)] 

Und bereits hinzugefügt Verweise auf MSHTML und SHDocVw Und schon schreiben ComRegister Funktion austragen Funktion

[ComRegisterFunction] 
public static void RegisterBHO(Type type) 
{ 
    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true); 
    if (registryKey == null) 
    { 
     registryKey = Registry.LocalMachine.CreateSubKey(BHOKEYNAME); 
    } 

    string guid = type.GUID.ToString("B"); 
    RegistryKey ourKey = registryKey.OpenSubKey(guid); 
    if (ourKey == null) 
    { 
     ourKey = registryKey.CreateSubKey(guid); 
    } 

    ourKey.SetValue("Alright", 1); 
    registryKey.Close(); 
    ourKey.Close(); 
} 

[ComUnregisterFunction] 
public static void UnregisterBHO(Type type) 
{ 
    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHOKEYNAME, true); 
    string guid = type.GUID.ToString("B"); 

    if (registryKey != null) 
    { 
     registryKey.DeleteSubKey(guid, false); 
    } 
} 

Und ich habe schon/get-Website Funktionen einstellen:

public int SetSite([MarshalAs(UnmanagedType.IUnknown)] object site) 
{ 
    if (site != null) 
    { 
     webBrowser = (SHDocVw.WebBrowser)site; 
     webBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete); 
     webBrowser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(this.OnBeforeNavigate2); 
     webBrowser.NavigateComplete2 += WebBrowser_NavigateComplete2; 
    } 
    else 
    { 
     webBrowser.DocumentComplete -= new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete); 
     webBrowser.BeforeNavigate2 -= new DWebBrowserEvents2_BeforeNavigate2EventHandler(this.OnBeforeNavigate2); 
     webBrowser.NavigateComplete2 -= WebBrowser_NavigateComplete2; 
     webBrowser = null; 
    } 

    return 0; 
} 

private void WebBrowser_NavigateComplete2(object pDisp, ref object URL) 
{ 
} 

public int GetSite(ref Guid guid, out IntPtr ppvSite) 

{ IntPtr punk = Marshal.GetIUnknownForObject (WebBrowser); int hr = Marshal.QueryInterface (punk, ref guid, aus ppvSite); Marshal.Release (Punk); Rückkehr hr; }

Dann habe ich ein Setup-Projekt:

Setup project propery İmage

Also, wenn ich ein Setup das Projekt, kann ich nicht sehen, meine "add-on" im Internet Explorer. Irgendwelche Vorschläge?

+0

Geänderter Fragetext für Klarheit und Codeformatierung – ManoDestra

Antwort

0

Wenn Sie glauben, dass es sich um ein Registrierungsproblem handelt, sollten Sie die Definition von BHOKEYNAME anzeigen. Es ist auch unwahrscheinlich, dass die Site-Funktionen mit der Bereitstellung zusammenhängen, da sie vom Browser aufgerufen werden, wenn Ihr BHO ordnungsgemäß angeschlossen ist.

Es ist nicht klar, welche anderen "Verdrahtungen" Sie in Ihrem Setup-Projekt haben könnten oder nicht. Windows Installer wird diese Registerfunktionen nicht nur aufrufen. Sie müssen dafür sorgen, dass das irgendwie passiert - wenn Sie sich im Entwicklungsmodus befinden (und nicht im Deployment-Modus), dann ist dies RegAsm.exe, aber das ist schwierig von einem Setup-Projekt.

Die andere Sache, die zu fehlen scheint, ist der COM-Teil. Wenn sich Ihre Dll für COM registrieren muss, scheint es in Ihrem Setup-Projekt nichts zu geben, das eine COM-Registrierung durchführt.

Deshalb glaube ich, es gibt mindestens zwei Dinge, die tun müssen:

  1. Es scheint, dass die DLL COM-Registrierung muss, deshalb sollten Sie für die DLL im Dateisystem im Hinblick auf die Eigenschaften-Fenster gehen und Wählen Sie eine vsdr COM-Einstellung.

  2. Wenn Sie BHO Registrierungseinträge erstellen müssen, dann warum nicht einfach die Registrierungsansicht im Setup-Projekt verwenden? Die gesamte Funktionalität zum Erstellen (und automatisches Deinstallieren) von Registrierungseinträgen ist da und Sie brauchen überhaupt keinen Code, um das zu erledigen.