我正在使用一个嵌入式系统,它已经设置了RAS条目,使用来自rasapi32.dll的API函数RasDial。
除了在RasDial之后和RasHangUp之前出现问题之外,一切都运行得很好。在这种情况下,无论是通过API还是通过Windows rasdial命令行实用程序进行拨号尝试,任何进一步的拨号尝试都会遇到错误756 "connection is met“。
rasdial connectionname /d也没有用。
用于调制解调器的com端口已锁定。
恢复的唯一方法是重新启动。
显然,在正常情况下,解决方案是确保RasHangUp始终跟在RasDial之后。但是对于这种情况,有没有一种方法可以中止拨号尝试?例如,如果应用程序调用RasDial,然后崩溃,我如何摆脱这种情况,而不是通过重启?
发布于 2011-07-26 01:40:25
不幸的是,除非您的应用程序可以在退出RAS之前正确地终止正在进行的连接,否则状态机就会损坏,必须重新启动才能修复问题。我已经注意到,Windows7比XP和Vista更好地处理这类情况,但仍有一些时候我不得不重启。
我已经设法防止了DotRas应用程序接口中的大多数此类问题,只要它们发生在RasDialer的事件处理程序中,但是如果应用程序从另一个线程崩溃,而不是从引发RasDialer事件的后台线程崩溃,我对此无能为力。
对于使用DotRas 1.2SDK的异步拨号:
using DotRas;
RasDialer dialer = new RasDialer();
dialer.EntryName = "My Connection";
dialer.Credentials = new NetworkCredential("My", "User");
dialer.DialAsync();此时,如果希望取消正在进行的连接尝试,则可以调用dialer.DialAsyncCancel()。
对于同步拨号,使用DotRas 1.2SDK与异步拨号非常相似,只是简单地将DialAsync调用替换为dialer.Dial()。
下面是我所讨论的API的链接:http://www.codeplex.com/DotRas
希望这能有所帮助!
https://stackoverflow.com/questions/6342226
复制相似问题