zoukankan      html  css  js  c++  java
  • 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() + "被删除了!");
                }
            }


  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/distance/p/2355555.html
Copyright © 2011-2022 走看看