【问题标题】:Why my add-ons viewing on internet explorer "manage add-ons" menu?为什么我在 Internet Explorer 的“管理加载项”菜单上查看加载项?
【发布时间】:2016-08-10 14:03:30
【问题描述】:

我正在为 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(朋克); 返回小时; }

然后我添加了一个设置项目:

Setup project propery İmage

所以当我设置项目时,我在 Internet Explorer 中看不到我的“插件”。有什么建议吗?

【问题讨论】:

  • 为了清晰和代码格式修改了问题文本

标签: c# internet-explorer setup-project add-on


【解决方案1】:

如果您认为这是一个注册问题,那么您应该显示 BHOKEYNAME 的定义。站点功能也不太可能与部署相关,因为当您的 BHO 正确连接时,它们会被浏览器调用。

目前尚不清楚您可能在设置项目中添加或未添加的其他“接线”。 Windows Installer 不仅会调用这些注册函数。您必须安排以某种方式发生 - 当您处于开发模式(而不是部署模式)时,RegAsm.exe 将执行此操作,但这对于安装项目来说很棘手。

似乎缺少的另一件事是 COM 部分。如果您的 Dll 需要注册 COM,那么您的安装项目中似乎没有任何内容可以进行任何 COM 注册。

所以我认为至少有两件事需要做:

  1. 您的 Dll 似乎需要 COM 注册,因此您应该转到文件系统视图中 Dll 的属性窗口并选择 vsdr COM 设置。

  2. 如果您需要创建 BHO 注册表项,那么为什么不直接在安装项目中使用注册表视图呢?用于创建(和自动卸载)注册表项的所有功能都在其中,您根本不需要任何代码来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2019-07-26
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2018-11-02
    相关资源
    最近更新 更多