25

关于这个主题的问题不乏问题,但我仍然遇到麻烦。这是我的情况。我有一项服务,我需要监视配置文件中指定的路径。当我使用本地驱动器时效果很好。

但是,当我将其更改为\\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(String value)
在 FileWatcher.FileWatcher.Watch()
在 FileWatcher.FileWatcher.OnStart(String[] args)
在 System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

4

5 回答 5

24

我刚试过这个:

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

这没有问题,但是我在以下情况下复制了您的异常:

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

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

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

在 cmd 中执行:

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

然后在您的代码中:

_watcher.Path = @"Z:\";
于 2012-06-27T16:53:58.647 回答
6

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

于 2012-06-27T13:39:06.887 回答
2

我找到了一种非常酷的方法来获取 UNC,其凭据与 Codeproject 上的 Windows 服务中的 FileSystemWatcher 一起使用。

请参阅 Adrian Hayes 的帖子: http: //www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials

他的解决方案很有效。

于 2013-12-03T14:37:19.103 回答
1

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

\\servername.company.com\directorytowatch
于 2015-10-28T18:23:40.820 回答
0

您可能需要如下所示的路径:

\\\\server2\\Secondary\\temp\\watch_folder

或者

@"\\server2\Secondary\temp\watch_folder"
于 2012-10-19T19:21:32.497 回答