2016-04-18 7 views
0

Je vous écris un add-on pour Internet Explorer 11.Pourquoi mes ajouts sur Internet explorer "gérer les modules complémentaires" menu?

Je l'ai déjà ajouté des variables guid:

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

et références déjà ajouté à MSHTML et SHDocVw Et déjà la fonction d'écriture ComRegister, fonction désinscription

[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); 
    } 
} 

Et je l'ai déjà set/get fonctions du site:

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, hors ppvSite); Marshal.Release (punk); retour hr; }

Puis j'ai ajouté un projet d'installation:

Setup project propery İmage

Alors, quand je configurer le projet, je ne peux pas voir mon "add-on" dans Internet Explorer. Aucune suggestion?

+0

Texte de la question modifiée pour la clarté et le formatage du code – ManoDestra

Répondre

0

Si vous pensez qu'il s'agit d'un problème d'enregistrement, vous devez afficher la définition de BHOKEYNAME. Il est également peu probable que les fonctions du site soient liées au déploiement car elles sont appelées par le navigateur lorsque votre BHO est correctement connecté.

On ne sait pas quel autre «câblage» vous avez peut-être ou n'avez pas mis dans votre projet de configuration. Windows Installer n'appelle pas seulement ces fonctions de registre. Vous devez faire en sorte que cela se produise d'une manière ou d'une autre - lorsque vous êtes en mode développement (et non en mode déploiement), c'est ce que fera RegAsm.exe, mais c'est compliqué à partir d'un projet d'installation.

L'autre élément qui semble manquer est la partie COM. Si votre DLL a besoin de s'enregistrer pour COM, il ne semble rien dans votre projet d'installation qui fera un enregistrement COM.

Je crois qu'il ya au moins deux choses qui doivent être faites:

  1. Il semble que votre dll a besoin enregistrement COM, par conséquent, vous devez aller à la fenêtre des propriétés du dll dans la vue du système de fichiers et choisissez un paramètre COM vsdr.

  2. Si vous avez besoin de créer des entrées de registre BHO alors pourquoi ne pas simplement utiliser l'affichage du Registre dans le projet d'installation? Toutes les fonctionnalités pour créer (et désinstaller automatiquement) les entrées de registre sont là, et vous n'avez besoin d'aucun code pour le faire.