2016-04-18 9 views
0

は、私は、Internet Explorer 11なぜ私のアドオンはInternet Explorerの "アドオンの管理"メニューで表示されますか?

私はすでに追加したGUIDの変数のアドオンを書いています:

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

そして、すでに追加MSHTMLとSHDOCVW への参照を、すでにComRegister関数を作成、登録解除機能

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

そして、私はすでに/ GETサイトの機能を設定しました:

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、out ppvSite); Marshal.Release(punk); return hr; }

それから私はセットアッププロジェクトを追加しました:ときに私のセットアッププロジェクト

Setup project propery İmage

をだから、私は私の「アドオン」Internet Explorerで見ることができません。助言がありますか?

+0

明快さとコードフォーマットのための修正された質問テキスト – ManoDestra

答えて

0

登録の問題だと思われる場合は、BHOKEYNAMEの定義を表示する必要があります。サイト機能は、BHOが正しく接続されているときにブラウザによって呼び出されるため、展開に関連することはほとんどありません。

セットアッププロジェクトに他の「配線」が含まれているかどうかは不明です。 Windowsインストーラはこれらのレジスタ機能を呼び出すだけではありません。何らかの形で起こるように手配しなければなりません。開発モード(デプロイメントモードではない)では、RegAsm.exeは何をするのですが、それはセットアッププロジェクトからは難しいです。

もう1つ不足していることはCOM部分です。あなたのDllがCOMに登録する必要がある場合、COM登録を行うセットアッププロジェクトに何もないようです。

だから私がやって必要な少なくとも二つのものがあると信じて:

  1. あなたのDLLがCOMの登録が必要であることが表示されます、したがって、あなたは、ファイル・システム・ビューにDllファイルのプロパティウィンドウに移動しなければならないし、 vsdr COM設定を選択します。

  2. BHOレジストリエントリを作成する必要がある場合は、セットアッププロジェクトのレジストリビューを使用しないのはなぜですか。レジストリエントリを作成(および自動的にアンインストール)するためのすべての機能がそこにあり、そのためにコードを一切必要としません。