关于这个话题不乏问题,但我仍然遇到麻烦。这是我的情况。我有一个服务,我需要观看配置文件中指定的路径。当我使用本地驱动器时,它工作得很好。
但是,当我将其更改为\\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(String [] args)
在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(对象状态)
答案 0 :(得分:20)
我刚试过这个:
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:\";
答案 1 :(得分:5)
您的服务可能在没有该共享权限的用户帐户下运行。尝试更改Windows服务以在不同凭据下运行。
答案 2 :(得分:2)
我找到了一种非常酷的方法,让UNC在代码项目的Windows服务中使用凭证与FileSystemWatcher一起工作。
见Adrian Hayes的帖子:http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials
他的解决方案很有效。
答案 3 :(得分:0)
您可能需要将路径设为
\\server2\\Secondary\\temp\\watch_folder
答案 4 :(得分:0)
我也遇到了这个问题。我的解决方法是在服务器路径中包含我们公司的域名:
\\servername.company.com\directorytowatch