Windows服务Webbrowser对象无效转换异常错误。

5
我遇到了一些问题,涉及到Windows Service中的webbrowser对象。它试图加载用户名和密码到一个网站,但是一直失败并抛出以下错误:
System.InvalidCastException:指定的强制转换无效。 在System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation() 在System.Windows.Forms.WebBrowser.get_Document() 在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服务中使其可见。谢谢。 - Sam Youtsey
2个回答

1
我曾经使用SHDocVW.WebBrowserClass遇到过类似的问题。当我尝试从SHDocVW.WebBrowserClass的实例(来自主线程)访问Document.all时,我收到了一个InvalidCastException,并且我能够通过将其转换为IHTMLDocument2而不是HTMLDocument来解决它。因为大多数情况下将其转换为HTMLDocument都可以工作,所以这花费了我很长时间才弄清楚。
SHDocVW.WebBrowserClass Explorer = [instance of IE];
((IHTMLDocument2)Explorer.Document).all  // works all the time
((HTMLDocument)Explorer.Document).all    // works some times

希望这能帮助到某个人。


1

我不确定Sam是否看到了Axl的回答,但Invoke方法似乎是答案。我也遇到了同样的问题,并找到了这个链接:http://stackoverflow.com/questions/315938/webbrowser-document-cast-not-valid/318538#318538 。那解决了我的问题 =) - Ted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接