Я пишу плагин для Internet Explorer, используя платформу SpicIE и C # 4.0.Мой плагин делает следующее: пользователь нажимает кнопку (кнопка «Поделиться ссылкой»), и плагин открывает отдельное окно IE с определенным URL.Когда я сделаю следующее: откройте 3 вкладки, от последней к первой нажмите «поделиться ссылкой», -> вкладки № 3 и № 2 откройте окно, как обычно.Вкладка # 1 выдает исключение:
System.Runtime.InteropServices.COMException (0x80004005): Ошибка HRESULT E_FAIL возвращена после вызова компонента COM.в SHDocVw.IWebBrowser2.get_Document () в BGPlugin.Entities.Bookmarklet.ExecuteLinkShareWindow () в BGPlugin.UserControls.LinkShareControl.btnAdd_Click (Отправитель объекта, EventArgs e) в System.Windows.Forgs.Color.Ens.Control.Cong.Windows.Forms.Button.OnClick (EventArgs e) в System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp (сообщение & m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc (Message & m) в System.Windows.Forms.ButtonBase.WndProc (Message & m) в System.Windows.Forms.Button.WndProc (Message & m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Сообщение & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Сообщение & m) в System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Также при отладке я получаю следующее исключение из Visual Studio 2010 перед предшествующим исключением:
ОтключениеКонтекст обнаружен.Контекст 0x2fb4b0 отключен.Прокси-сервер не будет использоваться для обслуживания запроса в компоненте COMЭто может привести к повреждению или потере данных.Чтобы избежать этой проблемы, убедитесь, что все контексты / апартаменты остаются живыми до тех пор, пока приложение не будет полностью завершено с RuntimeCallableWrappers, представляющими COM-компоненты, которые живут внутри них.
Я заметил очень загадочную вещь:исключение выше ocecers только в следующих случаях:
Количество открытых вкладок-Индекс неудачной вкладки (на основе 1, 0 означает ничего)
-------- 3----------------------- 1
-------- 4 ----------------------- 0
-------- 5 -----------------------2
-------- 6 ----------------------- 3
-------- 7 ----------------------- 0
-------- 8 ----------------------- 5
-------- 9 ----------------------- 8
-------- 10 ---------------------- 0
-------- 11 ---------------------- 0
-------- 12---------------------- 4
Я использовал следующий код для открытия нового окна:
Plugin.HostInstance.NewWindow (uri, windowName);
NewWinВ методе dow (...) используется следующий код:
try
{
object URL = url;
object flags = System.Reflection.Missing.Value; //special "nothing" value
object targetName = System.Reflection.Missing.Value; //special "nothing" value
object postData = System.Reflection.Missing.Value; //special "nothing" value
object headers = System.Reflection.Missing.Value; //special "nothing" value
InternetExplorer ie = (InternetExplorer)new InternetExplorer();
ie.AddressBar = false;
ie.ToolBar = 0;
ie.StatusBar = false;
ie.Width = 480;
ie.Height = 480;
ie.Resizable = false;
ie.Navigate2(ref URL, ref flags, ref targetName, ref postData, ref headers);
ie.Visible = true;
}
catch (Exception ex)
{
TraceSink.TraceEvent(TraceEventType.Error, 0, "Exception in Host.NewWindow :" + ex);
}
Я попытался использовать вместо NewWindow следующий код:
var psi = new ProcessStartInfo("iexplore", uri);
Process p = new Process();
p.StartInfo = psi;
p.Start();
Ошибка теперь происходит не регулярноно время от времени.
Пожалуйста, помогите мне исправить или преодолеть эту ошибку.