首页 > 解决方案 > C# BHO:单击扩展按钮时打开新的 Internet Explorer 选项卡

问题描述

嗨,我正在用 C# 为 IE 开发 BHO。当用户单击我的扩展按钮时,我想在新选项卡中打开一个 URL。

我正在使用 IOleCommandTarget 接口方法来捕获点击事件。但是这些方法并没有提供任何可以用来调用导航方法的浏览器对象。因此,必须尝试其他方法,例如下面提到的方法。

public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
        {
            try
            {
                InternetExplorer ie = null;

                SHDocVw.ShellWindows allBrowser = new SHDocVw.ShellWindows();
                int browserCount = allBrowser.Count - 1;

                while (browserCount >= 0)
                {
                    ie = allBrowser.Item(browserCount) as InternetExplorer;

                    if (ie != null && ie.FullName.ToLower().Contains("iexplore.exe"))
                    {
                      ie.Navigate2(SNXFileNames.ActivationPage, 0x1000);
                      break;
                    }

                    browserCount--;
                }            
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return 0;
        }

此方法在开发机器中可以找到,但在非开发机器中它会给出拒绝访问错误。

System.UnauthorizedAccessException:由于以下错误,从具有 CLSID{} 的组件检索 COM 类工厂失败:80070005 访问被拒绝。

标签: c#internet-explorer-11bho

解决方案


非开发机器的操作系统版本是多少?此错误通常是由于您的代码尝试创建的 COM 组件的访问设置错误造成的。

您可以尝试启动DCOMCNFG,转到DCOM设置,选择所需的对象并允许您的 C# 代码在其下运行的帐户访问它。

您也可以尝试通用解决方案:

  1. DCOMCNFG中,右键单击我的电脑并选择属性
  2. 选择COM 证券选项卡。
  3. Access Permissions中,单击Edit Defaults并将 Network Service 添加到其中并授予其Allow local access权限。对 < Machine_name >\Users 执行相同的操作。
  4. Launch and Activation Permissions中,单击Edit Defaults并向其添加 Network Service 并为其授予Local launchLocal Activation权限。对 < Machine_name >\Users 执行相同的操作。

参考链接:检索组件的 COM 类工厂失败


推荐阅读