FileSystemWatcher无法访问networking驱动器

我试图运行一个文件观察者通过使用Windows服务的一些服务器path。 我使用我的Windowslogin凭据来运行服务,并能够从我的login访问这个“someServerPath”。 但是,当我从FileSystemWatcher这样做时,会抛出:

目录名\ someServerPath无效“exception。

var fileWatcher = new FileSystemWatcher(GetServerPath()) { NotifyFilter=(NotifyFilters.LastWrite|NotifyFilters.FileName), EnableRaisingEvents=true, IncludeSubdirectories=true }; public static string GetServerPath() { return string.Format(@"\\{0}", FileServer1); } 

任何人都可以帮我这个吗?

我有使用FileSystemWatcher对象监视UNCpath没有任何问题的项目。

我看你的代码示例的猜测可能是你指向的监视器在服务器的根共享(/ /服务器名/)可能不是一个有效的文件系统共享? 我知道它在Windows资源pipe理器中返回诸如打印机,计划任务等。

尝试将观察者指向根下的一个共享 – 比如// servername / c $ /将是一个很好的testing例子,如果你在服务器上有远程pipe理权限的话。

关于更新的问题,我同意你可能需要指定一个有效的共享,而不仅仅是远程服务器名称。

[更新]解决了以前关于这个exception的问题:

指定名称为@"\\someServerPath"

作为一个单一的\

当您用@符号前缀string时,它不会处理转义序列。

即使这已经得到了答案,我以为我会把我的两分钱,因为即使你提供有效的path,你也可以看到这个相同的错误。

运行观察器的进程无法访问远程共享时,您将得到相同的错误。 如果观察者位于System帐户下运行的服务中,并且该共享是由用户创build的,则会发生这种情况。 系统无权访问该共享,并且无法识别该共享,则需要模拟用户才能访问该共享。

我只是被问到这个问题,作为一个服务运行的FileSystemWatcher代码,问​​题是权限。 我search并find了这个问题和答案,但不幸的是这里没有答案解决了这个问题。 无论如何,我只是解决了这个问题,所以我想我会把这个解决scheme放在下一个search和发现这个问题的人身上。

该驱动器被映射为login用户,但该服务以LocalSystem身份运行。 LocalSystem是不同的帐户,不能访问用户映射的驱动器。

解决的办法是:

  1. 首先进行身份validation(我使用C#类与证书build立networking连接 )
  2. 作为有权访问共享的用户运行您的服务。

您可以使用LocalSystem命令提示符testingLocalSystem身份validation,请参阅如何打开以本地系统身份运行的命令提示符?

尽pipe您可以通过networking使用FileWatcher,但您必须考虑其他因素,例如断开networking共享。 如果你的共享连接被终止(维护,延迟,设备重置等),你的filewatcher中的共享将不再有效

是否有什么特别的原因,你没有运行的文件系统监视器的物理机上有你想要看的目录?

您不能通过networking共享使用目录监视,这是操作系统的限制,而不是.NET的限制。

Interesting Posts