FileSystemWatcher在一台服务器上查看另一台服务器上的文件夹

时间:2013-06-12 14:05:45

标签: windows-services filesystemwatcher

我一直在这里和其他方面阅读有关FileSystemWatcher的内容,但仍然未能找到解决方案。

问题: FileSystemWatcher在一台服务器(prodserver1)上运行并查看另一台服务器(prodserver2)上的文件夹并收到以下错误:

  

“无法启动服务.System.ArgumentException:目录名称\ prodserver2 \ Public \ Synex \ R1010 \无效。      在System.IO.FileSystemWatcher..ctor(String path,String filter)“

此服务创建多个FileSystemWatchers。 R1010将替换为R1011,R2121等。所有这些目录都存储在app.config中。这是我的代码:

App.config中:

<!-- <add key ="R1010Directory" value="H:\Synex\R1010\" />
<add key ="R2057Directory" value="H:\Synex\R2057\" />
<add key ="R2190Directory" value="H:\Synex\R2190\" /> -->
<add key ="R1010Directory" value="\\prodserver2\Public\Synex\R1010\" />
<add key ="R2057Directory" value="\\prodserver2\Public\Synex\R2057\" />
<add key ="R2190Directory" value="\\prodserver2\Public\Synex\R2190\" />

*请注意我已尝试映射本地驱动器(H:映射到prodserver2 \ Public)。我们尝试了这条路线并得到了同样的错误。在Windows资源管理器中,我们没有任何问题。

服务OnStart:

            FileListener R1010Listener = new FileListener();
            R1010Listener.ListenforFile(ConfigurationManager.AppSettings["R1010Directory"], "*", "R1010");

            FileListener R2057Listener = new FileListener();
            R2057Listener.ListenforFile(ConfigurationManager.AppSettings["R2057Directory"], "*", "R2057");

            FileListener R2190Listener = new FileListener();
            R2190Listener.ListenforFile(ConfigurationManager.AppSettings["R2190Directory"], "*", "R2190");

FileListener.cs:

        FileSystemWatcher fileListener = new FileSystemWatcher(inputFileLoc, fileExtension);
        fileListener.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
        fileListener.IncludeSubdirectories = false;
        fileListener.InternalBufferSize = 65536;

        // Add event handlers.
        fileListener.Created += new FileSystemEventHandler(OnChanged);

        // Begin watching.
        fileListener.EnableRaisingEvents = true;

其他信息:

我们已将Windows服务登录更改为我的帐户,我已经提取这些文件夹并映射本地驱动器。我去了服务 - &gt;属性 - &gt; LogOn选项卡 - &gt;登录为:此帐户已选中,(当我使用我的.net帐户时,我获得了访问被拒绝,当我使用我的prod员工ID时,它接受了它,但后来我获得了无效目录)浏览并从我们的AD中选择我的员工ID - &gt;申请 - &gt;好。这个被接受了。当我开始服务时,收到上面的错误。有些东西告诉我它仍然是一个权限问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

经过一些更多的研究,并且运气不错,我能够让它发挥作用。

使用App.Config:

<add key ="R1010Directory" value="\\prodserver2\Public\Synex\R1010\" />
<add key ="R2057Directory" value="\\prodserver2\Public\Synex\R2057\" />
<add key ="R2190Directory" value="\\prodserver2\Public\Synex\R2190\" />

解决:

这里我们有两种登录方式。 “Windows 7用户”和“Novell用户”。我是一个Windows 7用户,但他们有一个虚拟的novell帐户供我访问其他东西。所以今天是密码重置日。我重置了我的Windows 7密码,登录到我希望我的filesystemwatcher监听的服务器,输入我的密码,并收到错误“密码无效”。该服务器使用novell设置来验证用户而不是我们的Windows设置。我让我们的信息安全团队将这两个帐户同步为一个,启动服务并且工作正常。权限问题的另一个例子。我的服务有一个有效的帐户,但不是该服务器的有效帐户。 prodserv1上的Windows服务有一个激活的filesystemwatcher,它在prodserver2上监听目录,现在使用UNC路径。希望这有助于其他人。