0

私は 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]。これは受け入れられます。サービスを開始しようとすると、上記のエラーが表示されます。まだ権限の問題である必要があると何かが私に言っています。どんな助けでも大歓迎です。

4

1 に答える 1

0

さらに調査を行い、運が良ければ、これを機能させることができました。

App.Config の使用:

<add key ="R1010Directory" value="\\prodserver2\Public\Synex\R1010\" />
<add key ="R2057Directory" value="\\prodserver2\Public\Synex\R2057\" />
<add key ="R2190Directory" value="\\prodserver2\Public\Synex\R2190\" />

解像度:

ここでは、2 種類のログインがあります。「Windows 7 ユーザー」と「Novell ユーザー」。私は Windows 7 のユーザーですが、他のものにアクセスするためのダミーの Novell アカウントを持っています。というわけで、今日はパスワードリセットの日でした。Windows 7 のパスワードをリセットし、filesystemwatcher にリッスンさせたいサーバーにログインし、パスワードを入力したところ、「パスワードが無効です」というエラーが表示されました。そのサーバーは、Windows の設定ではなく、Novell の設定を使用してユーザーを検証していました。情報セキュリティ チームに 2 つのアカウントを 1 つに同期してもらい、サービスを開始したところ、うまくいきました。権限の問題の別の例。私のサービスには有効なアカウントがありましたが、そのサーバーの有効なアカウントではありませんでした。prodserv1 の Windows サービスには、prodserver2 のディレクトリをリッスンするアクティブ化された filesystemwatcher があり、現在は UNC パスを使用して動作しています。これが他の人に役立つことを願っています。

于 2013-06-13T20:38:09.117 に答える