.NET Framework 2.0、Windows XP SP3、Windows 7
共有フォルダのディレクトリの有無を検出している訳ですが。
・WindowsXPのVisual Studio 2010のデバックで実行しているときには、trueが返ってくる。
・WindowsXPのサービス化した.NETのexeで実行しているときには、falseが返ってくる。
・Windows7のVisual Studio 2010のデバックで実行しているときには、trueが返ってくる。
・Windows7のサービス化した.NETのexeで実行しているときには、trueが返ってくる。
共有フォルダのパスは、ホスト名でもIPアドレスでも同じ結果となる。
そもそも、DirectoryクラスのExistsメソッドのAPIを見ると
Exists メソッドは、ネットワーク認証を実行しません。事前に認証を行わずに既存のネットワーク共有を照会すると、Exists メソッドが false を返します。
書いてあるので、「WindowsXPのサービス化した.NETのexeで実行しているとき」のfalseを返す動作が正常にも思える。
多分Directoryクラスの他のメソッドも、Fileクラスのメソッドも同様の動きだろうな。
(追記2011/07/22:他のメソッドのAPIを参照したけど、認証に関して明記してない)
各実行環境でのNetBIOSの件といい、なんでこんな動きになってんだろ?
回避策
ということで、マニュアルに書いてある通り、以前に作成していた下記のWNetAddConnection3関数による認証を行った上で、ファイル操作を行うことで解決した。
C#のコードからリモートのリソースにアクセス