[嗨,我正在用C#开发IE的BHO。当用户单击扩展按钮时,我想在新标签页中打开URL。
我正在使用IOleCommandTarget接口方法来捕获单击事件。但是这些方法没有给浏览器提供可用于调用Navigation方法的任何对象。因此,必须尝试其他方法,例如下面提到的方法。
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访问被拒绝。
非开发机的OS版本是什么?此错误通常是由您的代码尝试创建的COM组件上的访问设置错误引起的。
您可以尝试启动DCOMCNFG,转到DCOM设置,选择所需的对象,并允许您使用C#代码运行的帐户访问它。
您也可以尝试一般的解决方案: