我是C#的新手,如果这是个愚蠢的问题,请原谅。
我创建了一个控制台应用程序,它使用来自SHDocVw的“SHDocVw”。这个应用程序会转到一个网站并执行一些操作。它在我的电脑上运行得很好,但是当我试图发布它时,我就是不能让它在我的同事的电脑上工作。这些其他计算机没有安装dotnet核心。
因此,如果我将该应用程序发布为依赖于框架的应用程序,我会得到一个hostfxr.dll缺少的库错误,而且它显然根本不起作用。
我想我可以通过发布这个应用程序来解决这个问题。这也没什么用。我总是需要手动粘贴"Interop.MSHTML.dll“和"Interop.SHDocVw.dll”。当我这么做的时候,应用程序至少会启动。Internet资源管理器显示,“导航”命令工作。但是,一旦我试图隐藏窗口,或者尝试处理页面中的元素,它就会崩溃。
我得到两种类型的错误:
Unhandled Exception: System.Runtime.InteropServices.COMexception: The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at SHDocVw.IWebBrowser2.set_Visible(Boolean pBool) at MyWebApp.IEDriver.Visibility(Boolean isVisible) at MyWebApp.Program.Main(String[] args)Unhandled exception. System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (0x800706BA) at SHDocVw.InternetExplorerClass.get_ReadyState() at IEAutomation.IEDriver.WaitForComplete() in C:\Users\St3ve\source\repos\MyWebApp\MyWebApp\IEDriver.cs:line 552 at TestWeb.Program.Main(String[] args) in C:\Users\St3ve\source\repos\MyWebApp\MyWebApp\Program.cs:line 82
我试图谷歌的错误,但无法使它发挥作用,我将非常感谢任何提示或帮助。
发布于 2020-02-18 15:01:00
这种方法的关键是确保我们正在访问与我们的流程相关联的正确的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()、导航()等方法中,只要尝试访问InternetExplorer的优点或方法,就可以使用对象_IE。
_IE.Visible = false;
document = ((HTMLDocument)_IE.Document)https://stackoverflow.com/questions/60276263
复制相似问题