25

このトピックに関する質問が不足することはありませんが、まだ問題が発生しています。これが私の状況です。構成ファイルで指定されたパスを監視する必要があるサービスがあります。ローカルドライブを使用したときにうまく機能します。

ただし、サービスのようなものに変更すると\\server2\secondary\temp\watch_folder、サービスが開始されません。ログのエラーは

ディレクトリ名 \\server2\secondary\temp\watch_folder は無効です。

それを Windows エクスプローラーに直接コピーすると、フォルダーは正常に開きます。コードを取得して古い Winforms アプリに貼り付けると、正常に動作します。すべての「ログオン」アカウントを試しました。管理者アカウントを使用するように設定しましたが、サイコロはまだありません。

これが私のコードです:

_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;

何か案は?私は途方に暮れていて、この時点で私はそれを見つめすぎていたと思います. どんな助けにも心から感謝します。

ありがとう、ニック

編集 例外は次のとおりです。

サービスを開始できません。System.ArgumentException: ディレクトリ名 \server2\Secondary\temp\watch_folder が無効です。
System.IO.FileSystemWatcher.set_Path(String 値)
で FileWatcher.FileWatcher.Watch()
で FileWatcher.FileWatcher.OnStart(String[] args)
で System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(オブジェクトの状態)

4

5 に答える 5

24

私はちょうどこれを試しました:

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:\";
于 2012-06-27T16:53:58.647 に答える
6

サービスは、その共有へのアクセス許可を持たないユーザー アカウントで実行されている可能性があります。Windows サービスを別の資格情報で実行するように変更してみてください。

于 2012-06-27T13:39:06.887 に答える
2

codeproject の Windows サービスで FileSystemWatcher を使用して資格情報を使用して UNC を取得するための非常に優れた方法を見つけました。

Adrian Hayes の投稿を参照してください: http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials

彼の解決策はうまくいきます。

于 2013-12-03T14:37:19.103 に答える
1

私もこの問題に遭遇しました。私の修正は、サーバー パスに当社のドメイン名を含めることでした。

\\servername.company.com\directorytowatch
于 2015-10-28T18:23:40.820 に答える
0

以下のようなパスが必要になる場合があります。

\\\\server2\\Secondary\\temp\\watch_folder

また

@"\\server2\Secondary\temp\watch_folder"
于 2012-10-19T19:21:32.497 に答える