Windows XPe RAS ошибка 756 «соединение набирается» - PullRequest
0 голосов
/ 14 июня 2011

Я работаю со встроенной системой, в которой уже установлена ​​запись RAS, используя функцию API RasDial из rasapi32.dll.

Все работает хорошо, за исключением случаев, когда что-то идет не так после RasDial и до RasHangUp. В этом случае любая дальнейшая попытка набора номера встречается с ошибкой 756 «соединение набирается», независимо от того, выполняется ли попытка набора через API или с помощью утилиты командной строки Windows rasdial.

rasdial connectionname / d тоже не помогает.

Комм-порт, используемый для модема, заблокирован.

Единственный способ восстановления - перезагрузка.

Очевидно, что при нормальных обстоятельствах решение состоит в том, чтобы убедиться, что за RasDial всегда следует RasHangUp. Но для случаев, когда этого не происходит, есть ли способ прервать попытку набора номера? Например, если приложение вызывает RasDial, а затем происходит сбой, как мне выйти из этого, кроме перезагрузки?

1 Ответ

1 голос
/ 25 июля 2011

К сожалению, если ваше приложение не может должным образом разорвать соединение, которое выполняется, прежде чем выход из конечного автомата RAS будет поврежден и должен перезагрузиться, чтобы устранить проблему. Я заметил, что Windows 7 справляется с такого рода сценариями лучше, чем XP и Vista, но все же бывают случаи, когда мне приходилось перезагружаться.

Мне удалось предотвратить большинство подобных проблем с API DotRas, если они возникают в обработчиках событий RasDialer, но если приложение вылетает из другого потока, а не из фонового потока, который вызывает события 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

Надеюсь, это поможет!

...