我正在为Internet Explorer 11编写附加组件。
我已经添加了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(朋克); 返回小时; }
然后我添加了一个设置项目:
因此,当我设置项目时,我无法在Internet Explorer中看到我的“加载项”。有什么建议吗?
答案 0 :(得分:0)
如果您认为这是注册问题,那么您应该显示BHOKEYNAME的定义。站点功能也不太可能与部署相关,因为当您的BHO正确连接时,浏览器会调用它们。
目前还不清楚其他什么"布线"您可能已经或可能没有进入您的安装项目。 Windows Installer不仅会调用这些寄存器功能。你必须安排以某种方式发生 - 当你处于开发模式(而不是部署模式)时,RegAsm.exe会做什么,但这对于安装项目来说是棘手的。
另一件似乎缺少的是COM部分。如果您的Dll需要注册COM,则您的安装项目中似乎没有任何内容可以进行任何COM注册。
所以我相信至少有两件事需要做:
您的Dll似乎需要COM注册,因此您应该在文件系统视图中转到Dll的属性窗口并选择vsdr COM设置。
如果您需要创建BHO注册表项,那么为什么不在安装项目中使用注册表视图?创建(并自动卸载)注册表项的所有功能都在那里,您根本不需要任何代码来完成这项工作。