2016-04-18 51 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); 
    } 
} 

而且我已經設置/獲取網站功能:

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(朋克); return hr; }

然後,我添加安裝項目:

Setup project propery İmage

所以,當我設置的項目,我看不到我的「附加」在Internet Explorer中。有什麼建議麼?

+0

修正了問題文本的清晰度和代碼格式 – ManoDestra

回答

0

如果您認爲這是一個註冊問題,那麼您應該顯示BHOKEYNAME的定義。站點功能也不太可能與部署相關,因爲當BHO正確連接時,瀏覽器會調用它們。

目前還不清楚你的安裝項目中可能包含或不包含的其他「接線」。 Windows Installer不會只調用這些寄存器函數。你必須安排這種事情發生 - 當你處於開發模式(而不是部署模式)時,RegAsm.exe會這樣做,但這對安裝項目來說很棘手。

似乎缺少的另一件事是COM部分。如果您的Dll需要註冊COM,那麼在您的安裝項目中似乎沒有任何COM會註冊。

所以我相信至少有兩件事情需要做:

  1. 看來,你的DLL需要COM註冊,因此,你應該去屬性窗口中的DLL文件系統視圖和選擇一個vsdr COM設置。

  2. 如果您需要創建BHO註冊表項,那麼爲什麼不直接在安裝項目中使用註冊表視圖?所有創建(和自動卸載)註冊表項的功能都在那裏,你根本不需要任何代碼就可以完成。

相關問題