6

Windowsサービスを使用してサーバーパス上でファイルウォッチャーを実行しようとしています。Windowsログインクレデンシャルを使用してサービスを実行しており、ログインからこの「someServerPath」にアクセスできます。しかし、FileSystemWatcherからそれを行うと、次のようにスローされます。

ディレクトリ名\someServerPathが無効です"例外。

var fileWatcher = new FileSystemWatcher(GetServerPath()) 
    {
        NotifyFilter=(NotifyFilters.LastWrite|NotifyFilters.FileName),
        EnableRaisingEvents=true,
        IncludeSubdirectories=true
    };

public static string GetServerPath() 
{
    return string.Format(@"\\{0}", FileServer1);              
}

誰かがこれを手伝ってくれませんか?

4

7 に答える 7

9

FileSystemWatcherオブジェクトを使用してUNCパスを問題なく監視しているプロジェクトがあります。

コード例を見ると、有効なファイルシステム共有ではない可能性のあるサーバーのルート共有(// servername /)にウォッチャーを向けている可能性がありますか?Windowsエクスプローラーでプリンターやスケジュールされたタスクなどが返されることは知っています。

ルートの下にある共有をウォッチャーに向けてみてください。サーバーのリモート管理者権限がある場合は、// servername / c$/のようなものが良いテスト例になります。

于 2009-06-06T22:08:58.677 に答える
5

更新された質問に関しては、リモートサーバー名だけでなく、おそらく有効な共有を指定する必要があることに同意します。

[更新]これに関する例外に関する以前の質問を修正しました:

名前を次のように指定します@"\\someServerPath"

\は単一の\としてエスケープされています

文字列の前に@記号を付けると、エスケープシーケンスは処理されません。

于 2009-06-06T19:14:41.390 に答える
3

サービスとして実行されているFileSystemWatcherコードに関してこの質問がありましたが、問題は権限です。私はこの質問と回答を検索して見つけましたが、残念ながら、ここでの回答はどれも問題を解決しませんでした。とにかく、私はちょうどそれを解決したので、私はこの質問を検索して見つける次の人のためにここに解決策を投げ込むと思いました。

ドライブはログインユーザーとしてマップされましたが、サービスはLocalSystemとして実行されていました。LocalSystemは別のアカウントであり、ユーザーによってマップされたドライブにアクセスできません。

修正は次のいずれかになります。

  1. 最初に認証します(C#クラスを使用して、資格情報を使用してネットワーク接続を確立します
  2. 共有にアクセスできるユーザーとしてサービスを実行します。

LocalSystemコマンドプロンプトを使用してLocalSystem認証をテストできます。「ローカルシステムとして実行されているコマンドプロンプトを開く方法」を参照してください。

于 2012-11-30T17:21:38.190 に答える
2

これはすでに答えられていますが、有効なパスを指定しても同じエラーが表示される可能性があるため、2セントの価値があると思いました。

ウォッチャーを実行しているプロセスがリモート共有にアクセスできない場合にも、同じエラーが発生します。これは、ウォッチャーがシステムアカウントで実行されているサービスに参加していて、共有がユーザーによって作成された場合に発生します。システムはその共有にアクセスできず、それを認識しません。アクセスするには、ユーザーになりすます必要があります。

于 2010-07-23T04:40:33.837 に答える
1

ネットワーク経由でFileWatcherを使用することはできますが、ネットワーク共有の切断など、他の要因を考慮する必要があります。共有への接続が終了した場合(メンテナンス、ラグ、機器のリセットなど)、ファイルウォッチャーで共有の有効なハンドルを使用できなくなります

于 2010-08-24T22:02:01.160 に答える
0

監視したいディレクトリがある物理マシンでFileSystemWatcherを実行していない特別な理由はありますか?

于 2009-06-06T19:22:52.063 に答える
-2

ネットワーク共有に対してディレクトリウォッチを使用することはできません。これはOSの制限であり、.NETの制限ではありません。

于 2009-06-06T20:42:00.210 に答える