繁体   English   中英

filesystemwatcher作为Windows服务?

[英]filesystemwatcher as windows service?

我打算创建一个应用程序,它将查看创建的任何文件的目录。 非常简单的时间来使用filesystemwatcher。 我的问题涉及如何利用它。 通常的做法是使用Windows服务来确保应用程序始终运行?

我一直试图摆脱构建Windows服务,如果我不需要,但我真的没有看到在这种情况下这样做的替代方案。 通常,我会将我的服务转换为控制台应用程序并使用Windows调度程序安排它,但这并不适用于这种情况。

任何人都可以推荐一种比Windows服务更好的方式来实现filesystemwatcher吗?

谢谢你的想法。

编辑以回应下面的评论,更具体地说,我只需要在服务器上查看目录,并且当创建新文件时,我必须将该文件的副本移动到同一服务器上的不同目录中,也许重命名它在这个过程中。

文件的频率和数量将非常小。 一天最多可能5-10。

我还不确定文件监视器是如何工作的,但这就是我的想法:文件系统触发事件; 我的意思是像NTFS必须这样做。 您的文件观察者会挂钩这些事件。 文件观察程序可能会暂停正在运行的线程,直到事件发生并且事件以某种方式唤醒线程。 挂起的线程在暂停时使用非常少的cpu周期(实际上没有),因此等待文件事件不需要任何费用。 所以一个轮询的方法浪费了很多cpu循环(这是法语,它意味着'一个狗屎负载')cpu循环,但文件观察者没有。 您可以查看PerfMon,看看这是否可能。

您应该详细描述您想要做什么,但通常如果您需要在后台运行并且不需要直接用户交互,那么服务通常是有意义的。

如果您愿意,可以根据需要使用远程处理将前端连接到您的服务。

是的,使用服务进行此类操作,但不要 使用 文件系统 观察程序 如果您在服务中轮询文件,也不要使用 Timer类。

检查以确保文件已完成写入,并且在尝试移动之前不再锁定。

它很容易轮询文件更改(语法可能已关闭),并消除了与文件系统观察程序事件相关的大量额外编程。

While True 'or your exit condition'
 Dim _files() as FileInfo = Directory.GetFiles(yourTargetDirectory)
 For Each _file as FileInfo In _files
  If _file.LastModifiedDate < DateTime.Now.AddMinutes(1) Then
    'move your files'
  End If
 Next

End While

使用Windows服务来包装FileSystemWatcher完全FileSystemWatcher您的需求。

FSW是适合工作的正确工具(文件系统监视的本机代码是正确的熊),并且服务是部署它的正确机制,因为您需要“始终开启”操作。

服务凭证也将独立于登录用户,这可能对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM