質問: WNetAddConnection2により、共有フォルダへログインする際の質問です。 相手先の端末が起動していない場合、応答なしで固まってしまいます。 回避方法はありますでしょうか。
回答: 例えば、`WNetAddConnection2`の前に`ping`を打ってみるとか? まあ`ping`を打ちあっても問題ない環境構築・設定を済ませている必要はあるでしょうが。 他には、`WNetAddConnection2`を行うだけの単機能の`.exe`を作成して子プロセスとして起動し、 それがタイムアウトと決めた時間内に終了してこない場合に、強制終了させるとか。 あるいは同一プロセス内でも`Task.Run`とか`async/await`にすれば、同等のことが出来るのかもしれませんが。 `ping`系はこんな記事があります。 C#でPingしてみよう ネットワーク経由で「いる/いない」を確認する5つの方法 Windowsの「ping」コマンドでネットワークトラブルの原因を調査する (1/2) (2/2)は会員登録(無料)が必要 英語版S.O.で`CancelSynchronousIo`でキャンセル出来るかも?とありましたが結局無理とのこと。 How to achieve the equivalent of WNetAddConnection2 with a timeout? Does CancelSynchronousIo work with WNetAddConnection2? Task.Run, async/awaitの記事例 初心者のためのTask.Run(), async/awaitの使い方