FileSystemWatcher用于监视UNC路径

nic*_*ity 22 c# filesystemwatcher

关于这个话题不乏问题,但我仍然遇到麻烦.这是我的情况.我有一个服务,我需要观看配置文件中指定的路径.当我使用本地驱动器时,它工作得很好.

但是,当我将其更改\\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;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我很茫然,此时我觉得我已经盯着它看了太久.我真诚地感谢任何帮助.

谢谢,尼克

编辑 以下是例外情况:

服务无法启动.System.ArgumentException:目录名\ server2\Secondary\temp\watch_folder无效. System.Service.File 上的FileWatcher.FileWatcher.Watch() 处的File.IO.FileSystemWatcher.set_Path
(String value )处于System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)中的FileWatcher.FileWatcher.OnStart(String [] args )


Mar*_*ano 21

我刚试过这个:

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();
Run Code Online (Sandbox Code Playgroud)

这没有问题,但是我在以下情况下复制了你的例外:

  • 正在运行的用户无权读取远程文件夹.
  • 远程文件夹不存在.

您的问题肯定与权限有关,我认为正在运行的用户没有所需的权限.

您可以尝试的另一件事是将远程文件夹映射到一个本地.

在cmd中执行:

NET USE Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中:

_watcher.Path = @"Z:\";
Run Code Online (Sandbox Code Playgroud)


Joh*_*ner 6

您的服务可能在没有该共享权限的用户帐户下运行.尝试更改Windows服务以在不同凭据下运行.