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


      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() + "被删除了!");
                }
            }


  • 相关阅读:
    ASP.NET Core 发布 centos7 配置守护进程
    AutoMapper在asp.netcore中的使用
    git忽略文件并删除git仓库中的文件
    Animate.css 一款牛逼的css3动画库
    URL中特殊符号的处理
    efcore 配置链接sqlserver
    简单抓取小程序大全,并展示。
    UEditor上传图片到七牛C#(后端实现)
    软件项目管理三国启示录01 群雄争霸之项目经理的自我修养
    【调侃】IOC前世今生
  • 原文地址:https://www.cnblogs.com/distance/p/2355555.html
Copyright © 2020-2023  润新知