InternetExplorer COMException: System.Runtime.InteropServices.COMexception: сервер RP C недоступен - PullRequest
2 голосов
/ 18 февраля 2020

Я очень новичок в C#, поэтому, пожалуйста, извините, если это глупый вопрос.

Я создал консольное приложение, которое использует "InternetExplorer" из SHDocVw. Это приложение переходит на веб-сайт и выполняет некоторые операции. Он прекрасно работает на моем компьютере, но когда я пытаюсь опубликовать sh, я просто не могу заставить его работать на компьютерах моих коллег. На этих других компьютерах не установлено ядро ​​do tnet.

Так что, если я опубликую sh приложение как зависимое от фреймворка, я получаю ошибку библиотеки пропущенных файлов hostfxr.dll, и она, очевидно, не работает все.

Я думал, что смогу это исправить, опубликовав приложение как самостоятельное. Это тоже не помогло. Мне всегда нужно вставлять «Interop.MS HTML .dll» и «Interop.SHDocVw.dll» вручную. Когда я это сделаю, приложение, по крайней мере, запускается. Inte rnet explorer появляется, команда "Navigate" работает. Но как только я пытаюсь скрыть окно или попытаться работать с элементами на странице, оно просто вылетает.

Я получаю два типа ошибок:

  1. 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)

  2. В других случаях я получаю очень похожую ошибку, но в ней даже упоминаются мои собственные пользовательские файлы, даже при работе на другом компьютере. Это нормально?

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

Я пытался гуглить ошибки, но не могу заставить их работать, я был бы очень признателен за любые подсказки или Помогите.

1 Ответ

1 голос
/ 18 февраля 2020

Суть этого подхода заключается в том, чтобы убедиться, что мы обращаемся к нужному 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 () и т. Д. c где бы вы ни пытались получить доступ к свойствам или методам InternetExplorer, вы можете использовать объект _ IE.

_IE.Visible = false;
document = ((HTMLDocument)_IE.Document)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...