CanStop 或 CanPauseAndContinue 为 true 时,才会在 SCM 的上下文菜单中启用“停止”、“暂停”或“继续”。如果已启用,则相应的命令将传递到服务,并且调用 OnStop、OnPause 或 OnContinue。如果 CanStop、CanShutdown 或 CanPauseAndContinue 为 false,则即使已实现相应的命令处理方法(如 OnStop),也不会予以处理。
上面是创建任何一个服务,我们都会涉及到的只是,具体在监视文件夹变化的时候,我们用到了FileSystemWatcher。
关于FileSystemWatcher:
侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。
使用 FileSystemWatcher 监视指定目录中的更改。可监视指定目录中的文件或子目录的更改。该组件可以监视本地计算机、网络驱动器或远程
计算机上的文件。(当然只读的媒体介质比如cd和dvd,它们文件的属性不会改变,所以也就不能触发事件)
若要监视所有文件中的更改,请将 Filter 属性设置为空字符串 ("")。若要监视特定的文件,请将 Filter 属性设置为该文件名。例如,若要监视文件 MyDoc.txt 中的更改,请将 Filter 属性设置为“MyDoc.txt”。也可以监视特定类型文件中的更改。例如,若要监视文本文件中的更改,请将 Filter 属性设置为“*.txt”。
可监视目录或文件中的若干种更改。例如,可监视文件或目录的 Attributes、LastWrite 日期和时间或 Size 方面的更改。通过将 FileSystemWatcher.NotifyFilter 属性设置为 NotifyFilters 值之一来达到此目的。
可监视文件或目录的重命名、删除或创建。例如,若要监视文本文件的重命名,请将 Filter 属性设置为“*.txt”,并调用 WaitForChanged 方法之一,调用时给出 WatcherChangeTypes 值的 Renamed。
Demo:
新建一个project,选择windows 服务类型,命名为WinServiceFileWatching,我们看到project的引用中自动添加了System.ServiceProcess名空间(这就是创建一个服务的函数集)。从工具中的组件中选择FileSystemWatcher1,拖放到service1的设计模式上,然后设置如下属性:
Filter 获取或设置筛选字符串,用于确定在目录中监视哪些文件。 我们设置为*.*,即所有文件
IncludeSubdirectories 获取或设置一个值,该值指示是否监视指定路径中的子目录。 设置为true
Path 获取或设置要监视的目录的路径 设置为我们要监视的对象,比如C:\DonnetData
然后添加以下代码:
Protected Overrides Sub OnStart(ByVal args() As String)
'' 在此处添加启动服务的代码。此方法应设置具体的操作
'' 以便服务可以执行它的工作。
FileSystemWatcher1.EnableRaisingEvents = True
'' 我们也可以根据输入的参数args动态设定要监视的对象
''FileSystemWatcher1.path= args(0)
End Sub
'' 创建文件(夹)时候触发,记录创建信息到e:\log.txt中
Priva