2010-03-01 5 views
4

У меня проблемы с веб-браузером Windows Service. Он пытается загрузить в значения имени пользователя и пароля для сайта, но держит неудачу и бросали следующую ошибку:Служба Windows Webbrowser недействительна ошибка исключения исключения

System.InvalidCastException: Specified cast is not valid. at System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation() at System.Windows.Forms.WebBrowser.get_Document() at MyWindowsService.MyDataProcessor.login()

код, который я использую, чтобы сделать этот вызов:

MyWebBrowser.Document.All["Login"].SetAttribute("Value", username); 
      MyWebBrowser.Document.All["Password"].SetAttribute("Value", password); 
      MyWebBrowser.Document.All["submit"].InvokeMember("Click"); 

Любые идеи относительно того, почему он продолжает терпеть неудачу? Заранее спасибо за помощь.

+1

Так что я думаю, что выяснил, в чем проблема. В объекте WebBrowser есть ошибка, которая запрещает запуск DocumentCompleted, когда он не отображается, что такое служба Windows. (Вот ссылка: http://support.microsoft.com/kb/259935) Как мне исправить это? Я хотел бы продолжать использовать объект WebBrowser, поэтому мне не нужно переписывать все, но не знаю, как сделать его видимым в службе Windows. Благодарю. –

ответ

0

Я не уверен, что это решает проблему, но вы можете проверить свойство InvokeRequired на текущем объекте или WebBrowser.InvokeRequired и использовать что-то вроде MethodInvoker для вызова вашей функции или вспомогательной функции для доступа к WebBrowser.Document.

http://www.megasolutions.net/cSharp/(WebBrowser_Document-==-null)-throws-InvalidCastException-43126.aspx

+0

Я не уверен, что Сэм видел Axl: s ответ, но Invoke-вещь кажется ответом. У меня была такая же проблема, и я нашел это: http://stackoverflow.com/questions/315938/webbrowser-document-cast-not-valid/318538#318538. Это решило мою проблему =) – Ted

1

У меня была аналогичная проблема с использованием SHDocVW.WebBrowserClass. Я получил InvalidCastException, когда я попытался получить доступ к Document.all из экземпляра SHDocVW.WebBrowserClass (из основного потока), и я смог исправить его, перейдя на IHTMLDocument2 вместо HTMLDocument. Это заняло у меня много времени, чтобы понять, потому что большая часть времени работает в HTMLDocument.

SHDocVW.WebBrowserClass Explorer = [instance of IE]; 
((IHTMLDocument2)Explorer.Document).all // works all the time 
((HTMLDocument)Explorer.Document).all // works some times 

Я надеюсь, что это кому-то поможет.

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