2012-06-27 119 views
21

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

但是,当我将其更改为诸如\\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; 

任何想法?我很茫然,在这一点上,我认为我一直在盯着它太久。我衷心感谢任何帮助。

感谢, 尼克

编辑 这里是个例外:

服务无法启动。 System.ArgumentException:目录名称\ server2 \ Secondary \ temp \ watch_folder无效。
在System.IO.FileSystemWatcher.set_Path(字符串值)
在FileWatcher.FileWatcher.Watch()
在FileWatcher.FileWatcher.OnStart(字串[] args)
在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(对象状态)

+0

您的意思是问题已解决? –

+0

不,问题没有解决。我仍然无法启动服务。 – nickfinity

+1

你有任何异常错误吗?你知道如何调试Windows服务吗?任何关于错误的信息都有帮助。 –

回答

18

我只是尝试这样做:

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(); 

,如果没有问题的作品,但是我复制你的异常就在:

  • 正在运行的用户没有权限读取远程文件夹。
  • 远程文件夹不存在。

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

您可以尝试的另一件事是将远程文件夹映射到一个本地文件夹。在你的代码

NET USE Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password 

然后:

在cmd执行此

_watcher.Path = @"Z:\"; 
+1

我有这个问题,这是一个权限问题夹。谢谢您的帮助! – liebs19

+0

我也有这个问题。我使用FileSystemWatcher进行的服务设置为将网络驱动器上的文件夹监视为NetworkService **,并且路径中有空格,所以我认为这是问题。**我正在笔记本电脑上运行它。在阅读有关权限的答案之后,我使用FileSystemWatcher在服务器上安装了该服务,问题消失了!从该应用服务器运行时,该服务在NetworkService下具有正确的权限。 - 有用的答案! –

5

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

0

您可能需要对你的路径

\\server2\\Secondary\\temp\\watch_folder 
+0

您需要在server2之前使用两个以上的斜杠才能这样做:Try \\\\ server2 \\ Secondary \\ temp \\ watch_folder –

0

我也遇到了这个问题。我的修复方案是将我们公司的域名包含在服务器路径中:

\\servername.company.com\directorytowatch