私は FileSystemWatcher についてここと他の側面を読んできましたが、まだ解決策を見つけることができませんでした。
問題: FileSystemWatcher が 1 つのサーバー (prodserver1) で実行され、別のサーバー (prodserver2) のフォルダーを参照すると、次のエラーが発生します。
「サービスを開始できません。System.ArgumentException: ディレクトリ名 \prodserver2\Public\Synex\R1010\ は無効です。System.IO.FileSystemWatcher..ctor (文字列パス、文字列フィルター) で」
このサービスは、複数の FileSystemWatcher を作成します。R1010 は R1011、R2121 などに置き換えられます。これらのディレクトリはすべて app.config に保存されます。私のコードは次のようになります。
App.config:
<!-- <add key ="R1010Directory" value="H:\Synex\R1010\" />
<add key ="R2057Directory" value="H:\Synex\R2057\" />
<add key ="R2190Directory" value="H:\Synex\R2190\" /> -->
<add key ="R1010Directory" value="\\prodserver2\Public\Synex\R1010\" />
<add key ="R2057Directory" value="\\prodserver2\Public\Synex\R2057\" />
<add key ="R2190Directory" value="\\prodserver2\Public\Synex\R2190\" />
*ローカル ドライブをマッピングしようとしたことに注意してください (H: prodserver2\Public にマッピングされました)。そのルートを試してみましたが、同じエラーが発生しました。Windowsエクスプローラーでアクセスすると、問題はありません。
サービス開始時:
FileListener R1010Listener = new FileListener();
R1010Listener.ListenforFile(ConfigurationManager.AppSettings["R1010Directory"], "*", "R1010");
FileListener R2057Listener = new FileListener();
R2057Listener.ListenforFile(ConfigurationManager.AppSettings["R2057Directory"], "*", "R2057");
FileListener R2190Listener = new FileListener();
R2190Listener.ListenforFile(ConfigurationManager.AppSettings["R2190Directory"], "*", "R2190");
FileListener.cs:
FileSystemWatcher fileListener = new FileSystemWatcher(inputFileLoc, fileExtension);
fileListener.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
fileListener.IncludeSubdirectories = false;
fileListener.InternalBufferSize = 65536;
// Add event handlers.
fileListener.Created += new FileSystemEventHandler(OnChanged);
// Begin watching.
fileListener.EnableRaisingEvents = true;
追加情報:
Windows サービス ログオンを、これらのフォルダーをプルアップし、ローカル ドライブをマッピングしたアカウントに変更しました。[サービス] -> [プロパティ] -> [ログオン] タブ -> [ログオン] に移動しました: このアカウントがチェックされました (.net アカウントを使用するとアクセスが拒否され、prod 従業員 ID を使用すると受け入れられますが、無効なディレクトリが表示されます) ) AD から自分の従業員 ID を参照して選択します -> 適用 -> [OK]。これは受け入れられます。サービスを開始しようとすると、上記のエラーが表示されます。まだ権限の問題である必要があると何かが私に言っています。どんな助けでも大歓迎です。