Windows XPe RAS ошибка 756 "соединение набирается"
Я работаю со встроенной системой, в которой уже установлена запись RAS, используя функцию API RasDial из rasapi32.dll.
Все работает хорошо, за исключением случаев, когда что-то идет не так после RasDial и до RasHangUp. В этом случае любая дальнейшая попытка дозвона встречается с ошибкой 756 "соединение набирается", независимо от того, делается ли попытка дозвона через API или с помощью утилиты командной строки Windows rasdial.
rasdial имя_соединения /d тоже не помогает.
Ком порт, используемый для модема, заблокирован.
Единственный способ восстановления - перезагрузка.
Очевидно, что в нормальных условиях решение состоит в том, чтобы убедиться, что за RasDial всегда следует RasHangUp. Но для случаев, когда этого не происходит, есть ли способ прервать попытку набора номера? Например, если приложение вызывает RasDial, а затем происходит сбой, как мне выйти из этого, кроме перезагрузки?
1 ответ
К сожалению, если ваше приложение не может должным образом разорвать соединение, которое выполняется, прежде чем выход из конечного автомата 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
Надеюсь, это поможет!