このトピックについての質問は不足していませんが、私はまだ問題を抱えています。これが私の状況です。設定ファイルで指定されているパスを監視する必要のあるサービスがあります。ローカルドライブを使用した場合は、問題なく動作します。
ただし、\\server2\secondary\temp\watch_folder
などに変更すると、サービスが開始されません。ログのエラーは
ディレクトリ名\\ server2\secondary\temp\watch_folderは無効です。
それを直接Windowsエクスプローラにコピーすると、フォルダは正常に開きます。コードを取得して古いWinformsアプリに貼り付けると、問題なく動作します。 「ログオン」アカウントをすべて試しました。 Administratorアカウントを使用するように設定しましたが、まだサイコロはありません。
これが私のコードです:
_watcher = new FileSystemWatcher();
_watcher.Path = ConfigurationManager.AppSettings["WatchFolder"];
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
_watcher.Filter = "*.txt";
_watcher.Created += new FileSystemEventHandler(OnCreated);
_watcher.Error += new ErrorEventHandler(OnError);
_watcher.EnableRaisingEvents = true;
何か案は?私は途方に暮れていて、この時点で私はそれをあまりにも長く見続けてきたと思います。何卒よろしくお願い申し上げます。
ありがとう、ニック
[〜#〜] edit [〜#〜]ここに例外があります:
サービスを開始できません。 System.ArgumentException:ディレクトリ名\ server2\Secondary\temp\watch_folderは無効です。
at System.IO.FileSystemWatcher.set_Path(String value)
FileWatcher.FileWatcher.Watch()で
at FileWatcher.FileWatcher.OnStart(String [] args)
System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)で
私はこれを試しました:
var _watcher = new FileSystemWatcher();
_watcher.Path = @"\\10.31.2.221\shared\";
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
_watcher.Filter = "*.txt";
_watcher.Created += new FileSystemEventHandler((x, y) =>Console.WriteLine("Created"));
_watcher.Error += new ErrorEventHandler( (x, y) =>Console.WriteLine("Error"));
_watcher.EnableRaisingEvents = true;
Console.ReadKey();
問題なく動作しますが、次の場合にのみ例外を複製しました。
あなたの問題は確かに権限に関連しています。実行中のユーザーには必要な権限がないと思います。
もう1つ試すことは、リモートフォルダーを1つのローカルにマップすることです。
これをcmdで実行します。
Net Use Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password
次に、コードで:
_watcher.Path = @"Z:\";
サービスは、その共有へのアクセス許可がないユーザーアカウントで実行されている可能性があります。異なる資格情報で実行するようにWindowsサービスを変更してみてください。
CodeprojectのWindowsサービスでFileSystemWatcherを使用して認証情報でUNCを取得する本当にクールな方法を見つけました。
adrian Hayesの投稿を参照してください: http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials
彼の解決策はごちそうです。
私もこの問題に遭遇しました。私の修正は、サーバーパスに当社のドメイン名を含めることでした。
\\servername.company.com\directorytowatch
次のようなパスが必要になる場合があります。
\\\\server2\\Secondary\\temp\\watch_folder
または
@"\\server2\Secondary\temp\watch_folder"