c# - 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 访问被拒绝。
解决方案
非开发机器的操作系统版本是多少?此错误通常是由于您的代码尝试创建的 COM 组件的访问设置错误造成的。
您可以尝试启动DCOMCNFG,转到DCOM设置,选择所需的对象并允许您的 C# 代码在其下运行的帐户访问它。
您也可以尝试通用解决方案:
- 在DCOMCNFG中,右键单击我的电脑并选择属性。
- 选择COM 证券选项卡。
- 在Access Permissions中,单击Edit Defaults并将 Network Service 添加到其中并授予其Allow local access权限。对 < Machine_name >\Users 执行相同的操作。
- 在Launch and Activation Permissions中,单击Edit Defaults并向其添加 Network Service 并为其授予Local launch和Local Activation权限。对 < Machine_name >\Users 执行相同的操作。
参考链接:检索组件的 COM 类工厂失败
推荐阅读
- python - 检查双端队列为空时的时间复杂度
- ms-access - 什么是刷新MS Access中表中所有记录的好方法
- flutter - 如何将文本放置在标签栏的左侧?
- bootstrap-4 - 如何在 bootstrap-datetimepicker 中设置深色主题?
- flutter - Flutter Screens 层次结构
- spring-boot - 类 java.util.LinkedList 不能转换为类 org.reactivestreams.Publisher
- nginx - 摄入客户端和摄入服务器之间启用 TLS 的通信
- html - 按回车键移动下一步在html的日期字段中不起作用
- asp.net-core - HTTPClientFactory中释放TCP端口的机制是怎样的?
- php - 下面的代码行有什么办法吗?我试图让 WhatsApp 在不同的页面上打开