c# - InternetExplorer COMException : System. Runtime.InteropServices.COMexception: RPC 服务器不可用

标签 c# .net-core console-application

我是 C# 的新手,所以如果这是一个愚蠢的问题,请原谅。

我创建了一个控制台应用程序,它使用来自 SHDocVw 的“InternetExplorer”。此应用程序转到网站并执行一些操作。它在我的电脑上工作得很好,但是当我试图发布它时,我就是无法让它在我同事的电脑上工作。这些其他计算机没有安装 dotnet 核心。

因此,如果我将应用程序发布为依赖于框架的应用程序,我会收到 hostfxr.dll 缺少库错误,并且它显然根本不起作用。

我想我可以通过将应用发布为独立应用来解决这个问题。这也没有帮助。我总是需要手动粘贴“Interop.MSHTML.dll”和“Interop.SHDocVw.dll”。当我这样做时,应用程序至少会启动。 Internet Explorer 出现,“导航”命令有效。但是,一旦我尝试隐藏窗口,或尝试使用页面中的元素,它就会崩溃。

我遇到两种类型的错误:

  1. 未处理的异常:System.Runtime.InteropServices.COMexception:RPC 服务器不可用。 (HRESULT 异常:0x800706BA) 在 SHDocVw.IWebBrowser2.set_Visible(Boolean pBool) 在 MyWebApp.IEDriver.Visibility( bool 值可见) 在 MyWebApp.Program.Main(String[] args)

  2. 有时我会遇到非常相似的错误,但它甚至会提到我自己的用户文件,即使在不同的机器上运行也是如此。这正常吗?

未处理的异常。 System.Runtime.InteropServices.COMException (0x800706BA): RPC 服务器不可用。 (0x800706BA) 在 SHDocVw.InternetExplorerClass.get_ReadyState() 在 IEAutomation.IEDriver.WaitForComplete() 在 C:\Users\St3ve\source\repos\MyWebApp\MyWebApp\IEDriver.cs:line 552 在 TestWeb.Program.Main(String[] args) 在 C:\Users\St3ve\source\repos\MyWebApp\MyWebApp\Program.cs:line 82

我试图用谷歌搜索错误,但无法正常工作,如果有任何提示或帮助,我将不胜感激。

最佳答案

这种方法的关键是确保我们正在访问与我们的进程关联的正确的 InternetExplorer 对象

private InternetExplorer _IE; 

public Process m_Proc = Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", "-nomerge www.google.com");

public IEDriver()
{


    Thread.Sleep(5000);
    _IE = null;
    ShellWindows m_IEFoundBrowsers = new ShellWindows();
    foreach (InternetExplorer Browser in m_IEFoundBrowsers)
    {
    if (Browser.HWND == (int)m_Proc.MainWindowHandle)
    {
    _IE = Browser;
    break;
    }
} 

然后在 WaitForCompleteNew()、Navigate() 等方法中,只要您尝试访问 InternetExplorer 的属性或方法,就可以使用对象 _IE。

_IE.Visible = false;
document = ((HTMLDocument)_IE.Document)

关于c# - InternetExplorer COMException : System. Runtime.InteropServices.COMexception: RPC 服务器不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60276263/

相关文章:

vb.net - 在VB.NET中如何循环直到用户输入的变量为整数?

c# - 如何在没有 Windows 窗体的情况下接收即插即用设备通知

c# - TableLayoutPanel:删除行

c# - 在 IIS7 中从 ASP.NET 调用非托管代码

c# - 带有 Action<T> 参数的模拟方法

c# - EntityFramework 外键作为具有流畅 API 的主键

c# - 使用外部 WCF 服务时,在 docker 内运行的 Dotnet 核心 Web api 无法进行身份验证

c# - WPF 控件库目标 .NET Core 3 或 .NET Framework?

.net-core - Blazor Server 将多个组件中的模型绑定(bind)到单个 EditForm

c# - 在控制台应用程序中编写 cmd 命令