0

我正在使用已经设置了 RAS 条目的嵌入式系统,使用来自 rasapi32.dll 的 API 函数 RasDial。

一切正常,除非在 RasDial 之后和 RasHangUp 之前出现问题。在这种情况下,任何进一步的拨号尝试都会遇到错误 756“正在拨号连接”,无论拨号尝试是通过 API 还是通过 Windows rasdial 命令行实用程序完成的。

rasdial connectionname /d 也无济于事。

用于调制解调器的 com 端口被锁定。

恢复的唯一方法是重新启动。

显然,在正常情况下,解决方案是确保 RasDial 始终跟随 RasHangUp。但是对于没有发生这种情况的情况,有没有办法中止拨号尝试?例如,如果应用程序调用 RasDial 然后崩溃,除了重新启动之外,我如何摆脱这种情况?

4

1 回答 1

1

不幸的是,除非您的应用程序可以在退出 RAS 状态机之前正确终止正在进行的连接,否则会损坏并且必须重新启动才能解决问题。我注意到 Windows 7 比 XP 和 Vista 更好地处理这些类型的场景,但仍有一些情况下我不得不重新启动。

只要它们发生在 RasDialer 的事件处理程序中,我已经设法防止 DotRas API 的大多数此类问题,但是如果应用程序从另一个线程而不是从引发 RasDialer 事件的后台线程崩溃,对此我无能为力。

对于使用 DotRas 1.2 SDK 的异步拨号:

using DotRas;

RasDialer dialer = new RasDialer();
dialer.EntryName = "My Connection";
dialer.Credentials = new NetworkCredential("My", "User");
dialer.DialAsync();

从此时起,如果您想取消正在进行的连接尝试,您可以调用 dialer.DialAsyncCancel()。

使用 DotRas 1.2 SDK 的同步拨号与异步拨号非常相似,只是将 DialAsync 调用替换为简单的 dialer.Dial()。

这是我正在谈论的 API 的链接:http: //www.codeplex.com/DotRas

希望有帮助!

于 2011-07-25T17:40:24.733 回答