0

rasapi32.dllのAPI関数RasDialを使用して、RASエントリがすでに設定されている組み込みシステムを使用しています。

RasDialの後およびRasHangUpの前に問題が発生した場合を除いて、すべてが正常に機能します。この場合、ダイヤルの試行がAPIを介して行われたか、Windows rasdialコマンドラインユーティリティを介して行われたかにかかわらず、それ以上ダイヤルしようとすると、エラー756「接続がダイヤルされています」が発生します。

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 に答える