2013-09-19 1 views
0

Я пытаюсь автоматизировать ie.This мой код, чтобы поймать то есть окноизвлечения класса ком завода для компонента с CLSID {9ba05972-f6a8-11cf-a442-00a0c90a8f39} не удалось из-за следующей ошибки: 80040154

ProcessStartInfo psi = new ProcessStartInfo(); 
      psi.CreateNoWindow = false; 
      psi.FileName = "IExplore.exe"; 
      psi.Arguments = "-nomerge about:blank "; 
      psi.WindowStyle = ProcessWindowStyle.Normal; 
      Process p = new Process(); 
      p.StartInfo = psi; 

      if (p.Start()) 
      { 
       int maxWait = 10000, wait = 0; 
       while (!p.HasExited && (p.MainWindowHandle == IntPtr.Zero)) 
       { 
        wait += 10; 
        Thread.Sleep(10); 
        p.Refresh(); 

        if (wait > maxWait) break; 
       } 

       wait = 0; 
       while (!p.HasExited && (_IE == null)) 
       { 
        _IE = null; 
        ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();//here i get exception 
        foreach (InternetExplorer Browser in m_IEFoundBrowsers) 
        { 
         if (Browser.HWND == (int)p.MainWindowHandle) 
         { 
          _IE = Browser; 
          break; 
         } 
        } 

        if ((_IE != null) || (wait > maxWait)) break; 
        else 
        { 
         wait += 10; 
         Thread.Sleep(10); 
        } 
       } 

       if (_IE != null) 
       { 
        IE.Visible = true; 
        IE.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete); 
       } 
       else 
       { 
        Console.WriteLine("Problem opening IE!"); 
       } 
      } 

Этот код работает нормально, но когда я пытаюсь запустить приложение через remoteapp, тогда я получаю исключение. Я думаю, что причина связана с некоторым доступом, но не уверен, что делать. пожалуйста, помогите

+0

У вас есть дополнительная информация об исключении, которое вы получаете? Пожалуйста, отредактируйте сообщение и включите их. – Andrew

+0

Нет, это единственная ошибка, которую я получаю. Небольшое экспериментирование. Я обнаружил, что эта ошибка обычно возникает, когда программа dnt находит какой-либо браузер открытым. Так что мое предположение связано с проблемой прав доступа во время remoteapp, которую невозможно уловить, т.е. окно –

+0

Я запускаю приложение на сервере Windows 2008 r2. Я проверил все упрощения и групповую политику, все в порядке –

ответ

1

Наконец получил это работает только заменить выше большого кода с малым один

**

_IE = new InternetExplorer(); 
       IE.Visible = true; 
       IE.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete); 
       var handle = GetConsoleWindow(); 
       ShowWindow(handle, SW_HIDE); 

**

Но и здесь я получаю выше исключение, если не удалось автоматизации и т получает застрял, тогда остальная автоматизация начнет бросать это исключение. Резолюция к этому - мне нужно закрыть экземпляр неудавшегося т. Е. Из taskmanager, тогда все снова будет работать отлично.

Смежные вопросы

 Смежные вопросы