代码是我最大的快乐
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Windows服务简单应用之监听文件夹内的文件

Posted on 2012-02-17 11:58  distance  阅读(2951)  评论(5编辑  收藏  举报

  Windows服务还是比较强大的,这种应用程序没有用户界面,可以随系统的启动而运行起来,任何用户消息可以被写进Windows事件日志里,也可以将服务设置为本地服务,不受用户限制,可以对服务进行暂停继续等,但是如果服务是做实时监控的话,还是建议将服务的暂停功能禁掉。

  优点说了一堆了,看看实战吧,所谓的实战也是从别人的博客中学习过来的,我这里就借用一下梦幻Dot Net的一篇博客——用.Net开发Windows服务初探。讲的比较详细了,我在这里是要说一下我在创建Windows服务时遇到的一些问题,分享给大家。

————————————————————————————————————————————————————————————————————

  首先要说的是安装Windows服务:

    安装服务需要用到InstallUtil.exe程序,将编译好的服务应用程序的路径拷贝下来,进入CMD,找到服务应用程序所在目录,运行"InstallUtil YourServiceName.exe"。

    问题就来了,如果是在系统环境变量中未做设置,这里就会报错了,提示InstallUtil命令不可用,那就配置一下环境变量吧,一般目录都在“C:\Windows\Microsoft.NET\Framework\v4.0.30319”,如果项目版本是4.0的话就设置这个路径吧,如果这个设置的版本低,还会报出版本比应用程序版本低的错误。

    上面的问题如果不想麻烦也可以,单击“开始-->所有程序-->Microsoft Visual Studio 2010-->Visual Studio Tools-->Visual Studio 命令提示(2010)”,后续一样。

    还有一点要注意的是重新编译的服务都要先卸载掉原来的Windows服务,然后再安装重新编译好的Windows服务。

  其次要说的是EventLog的属性设置:

    在我的项目中添加了EventLog控件,他有一个属性EnableRaisingEvents,Microsoft给出的解释是“指示该组建是否监视事件日志的更改情况”,默认为False,如果改为True则安装好Windows服务之后无法启动该服务。具体原因暂时不清楚,也许和其他设置有关系吧,如果有明白的童鞋还请指教。

  最后贴上我的源码供大家分享:(不显示行号了,为了大家拷贝方便)

    

     private bool servicePaused = false;
     ///
<summary>
/// 启动服务
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
eventLog.WriteEntry(" 这个服务在:" + DateTime.Now.ToString() + "被启动了!");

fileSystemWatcher.EnableRaisingEvents = true;//开始监听
fileSystemWatcher.IncludeSubdirectories = true;

fileSystemWatcher.Changed += new FileSystemEventHandler(OnFileChanged);
fileSystemWatcher.Created += new FileSystemEventHandler(OnFileCreated);
fileSystemWatcher.Deleted += new FileSystemEventHandler(OnFileDeleted);
fileSystemWatcher.Renamed += new RenamedEventHandler(OnFileRenamed);
}
     /// <summary>
        /// 停止服务
        /// </summary>
        protected override void OnStop()
        {

        }


        private void OnFileChanged(Object source, FileSystemEventArgs e)
        {  
      if (servicePaused == false)
           {
                eventLog.WriteEntry(e.Name + " 这个文件在:" + DateTime.Now.ToString() + "被改动了!");
           }        
        }

        private void OnFileRenamed(Object source, RenamedEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 这个文件在:" + DateTime.Now.ToString() + "被重命名了!");
            }
        }

        private void OnFileCreated(Object source, FileSystemEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 这个文件在:" + DateTime.Now.ToString() + "被创建了!");
            }
        }

        private void OnFileDeleted(Object source, FileSystemEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 这个文件在:" + DateTime.Now.ToString() + "被删除了!");
            }
        }


态度决定事情的结果,态度决定人生的方向,态度决定别人对你的看法,态度能改变自己,也可以主观地去改变态度,改变的出发点就是你自己。--By Distance