55753
WNetAddConnection2により、共有フォルダへログインする際の質問です。  
相手先の端末が起動していない場合、応答なしで固まってしまいます。  
回避方法はありますでしょうか。
CC BY-SA 4.0
2019-06-13T06:11:38.137
55746
2019-06-13T10:43:01.880
32228
question
c#
共有フォルダへの接続エラーについて
例えば、`WNetAddConnection2`の前に`ping`を打ってみるとか？  
まあ`ping`を打ちあっても問題ない環境構築・設定を済ませている必要はあるでしょうが。

他には、`WNetAddConnection2`を行うだけの単機能の`.exe`を作成して子プロセスとして起動し、  
それがタイムアウトと決めた時間内に終了してこない場合に、強制終了させるとか。  
あるいは同一プロセス内でも`Task.Run`とか`async/await`にすれば、同等のことが出来るのかもしれませんが。

`ping`系はこんな記事があります。  
[C#でPingしてみよう](https://qiita.com/Argent0159/items/a5cec41fc7d2c74c2c0e)  
[ネットワーク経由で「いる／いない」を確認する5つの方法](https://www.itmedia.co.jp/bizid/articles/0701/24/news078.html)  
[Windowsの「ping」コマンドでネットワークトラブルの原因を調査する
(1/2)](https://www.atmarkit.co.jp/ait/articles/0012/01/news002.html)  
(2/2)は会員登録(無料)が必要

英語版S.O.で`CancelSynchronousIo`でキャンセル出来るかも？とありましたが結局無理とのこと。  
[How to achieve the equivalent of WNetAddConnection2 with a
timeout?](https://stackoverflow.com/q/9323023/9014308)  
[Does CancelSynchronousIo work with
WNetAddConnection2?](https://stackoverflow.com/q/9475581/9014308)

Task.Run, async/awaitの記事例  
[初心者のためのTask.Run(),
async/awaitの使い方](https://qiita.com/Alupaca1363Inew/items/0126270bca99883605de)
CC BY-SA 4.0
2019-06-13T10:32:39.433
55753
2019-06-13T10:43:01.880
2019-06-13T10:43:01.880
26370
26370
55746
answer