基于0起步来创建一个服务,做到简单的记录时间日志功能,其具体招行方法可自行添加。

1.创建服务

2.删除默认服务文件

3.添加自己的服务文件

4.更改启动项目

5. 引用 using System.Timers;并添加FileClass类

FileClass类

复制代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace TerminalTrance
{    public class FileClass
    {        //创建文件夹        //参数:path 文件夹路径
        public bool CreateFolder(string path)
        {            try
            {                if (Directory.Exists(path))
                {                    return true;
                }                if (!Directory.Exists(path.Substring(0, path.LastIndexOf("\\"))))
                { //若路径中无“\”则表示路径错误
                    return false;
                }                else
                {                    //创建文件夹
                    DirectoryInfo dirInfo = Directory.CreateDirectory(path);                    return true;
                }
            }            catch (Exception ex)
            {                return false;
            }
        }        //创建文件        //参数:path 文件路径
        public void CreateFile(string path)
        {            try
            {                if (CreateFolder(path.Substring(0, path.LastIndexOf("\\"))))
                {                    if (!File.Exists(path))
                    {
                        FileStream fs = File.Create(path);
                        fs.Close();
                    }
                }
            }            catch (Exception ex)
            {                return;
            }

        }        //删除文件        //参数:path 文件夹路径
        public void DeleteFile(string path)
        {            try
            {                if (!File.Exists(path))
                {                    return;
                }                else
                {
                    File.Delete(path);
                }

            }            catch (Exception ex)
            {                return;
            }
        }        //写文件        //参数:path 文件夹路径 、content要写的内容
        public void WriteFile(string path, string content)
        {            try
            {                if (!File.Exists(path))
                {
                    CreateFile(path);
                }
                FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(content);
                sw.Close();
            }            catch (Exception ex)
            {                return;
            }
        }        /// <summary>
        /// 将即时日志保存入日志文件        /// </summary>
        public void WriteLogFile(string directoryPath, string content)
        {            if (!Directory.Exists(directoryPath))
            {
                CreateFolder(directoryPath);
            }            try
            {                //写入新的文件
                string filePath = directoryPath + "\\" + DateTime.Now.Date.ToString("yyyyMMdd") + ".log";
                FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write);
                StreamWriter sw = new StreamWriter(fs);
                sw.WriteLine(content);
                sw.Close();
                fs.Close();
            }            catch (Exception ex)
            {

            }

        }
    }

}

复制代码

6. 添加上步中需要的InitService()方法

复制代码

/// <summary>
        /// 初始化服务参数        /// </summary>
        private void InitService()
        {            base.CanShutdown = true;            base.CanStop = true;            base.CanPauseAndContinue = true;            this.ServiceName = MainService.serviceName;            this.AutoLog = false;//为了使用自定义日志,必须将 AutoLog 设置为 false
            tim = new System.Timers.Timer();
            tim.Elapsed += new ElapsedEventHandler(tim_Elapsed);
            tim.Interval = 5000;
            tim.AutoReset = true;
        }

复制代码

7. 解决System不包含windows属性问题,引用程序集。

8.添加上面引用 的 tim_Elapsed 定时方法

复制代码

 private void tim_Elapsed(object sender, EventArgs e)
        {
            StartThread();
        }        /// <summary>  
        /// 开始任务 
        /// </summary>  
        private void StartThread()
        {
            MessageAdd(serviceName + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }        /// <summary>  
        ///  日志记录        /// </summary>  
        /// <param name="serviceName">内容</param>  
        public void MessageAdd(string str)
        {            try
            {
                fileclass.WriteLogFile(logPath, str);//写入记录日志            }            catch
            {

            }
        }

复制代码

9.此时生成解决方案是成功的

10.在OnStart等中写入自己的方法,这里用日志记录

复制代码

   protected override void OnStart(string[] args)
        {            try
            {                this.tim.Enabled = true;                this.tim.Start();
            }            catch (Exception ex)
            {
                MessageAdd("OnStart错误:" + ex.Message);
            }
            MessageAdd(serviceName + "已成功启动!");
        }        protected override void OnStop()
        {            try
            {                this.tim.Stop();
            }            catch (Exception ex)
            {
                MessageAdd("OnStop错误:" + ex.Message);
            }
            MessageAdd(serviceName + "已停止!");
        }        protected override void OnContinue()
        {            this.tim.Start();            base.OnContinue();
        }        protected override void OnPause()
        {            this.tim.Stop();            base.OnPause();
        }

复制代码

11.给服务添加安装程序。右键鼠标单击MainService.cs[设计]*选项卡选项“添加安装程序”。

12.可以看见项目中多了如下文件和组件,serviceProcessInstaller1、serviceInstaller1是自动生成的

13.设置组件serviceInstaller1的主要属性,StartType: AutoMatic自动启动;ServiceName: 服务系统标识,在cmd命令中执行sr start/stop/query等等命令时候使用,用来唯一标识一个Window服务

 

14.设置组件serviceProcessInstaller1的主要属性,Accout:账户类型,LocalSystem本地系统服务;

15.设置服务安装后“允许和桌面进行交互”,

需要在ProjectInstaller.cs中添加如下代码。

复制代码

using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Configuration.Install;using System.Linq;namespace TerminalTrance
{
    [RunInstaller(true)]    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {        public ProjectInstaller()
        {
            InitializeComponent();
        }        protected override void OnAfterInstall(IDictionary savedState)
        {            try
            {                base.OnAfterInstall(savedState);                // 允许服务桌面交互
                System.Management.ManagementObject myService = new System.Management.ManagementObject(string.Format("Win32_Service.Name='{0}'", this.serviceInstaller1.ServiceName));

                System.Management.ManagementBaseObject changeMethod = myService.GetMethodParameters("Change");

                changeMethod["DesktopInteract"] = true;

                System.Management.ManagementBaseObject OutParam = myService.InvokeMethod("Change", changeMethod, null);

            }            catch (Exception ex)
            {

            }

        }
    }
}

复制代码

16.Windows服务的安装和卸载

代码写完后,编译通过后,就可以安装、卸载、调试服务了。

在执行安装或卸载服务前,我有把服务需要的相关文件,复制到C:\Service\下面或其他路径。一旦安装完成后,此目录不能变更,否则不能卸载该服务和服务运行会报错。

安装、卸载很简单,只要在VS命令行导航到,服务程序的路径。然后运行以下命令就OK了。

打开如图:

安装服务:installutil C:\Service\TerminalTrance.exe

卸载服务:installutil /u C:\Service\TerminalTrance.exe

调试的话,只能先安装启动服务,然后将该服务附加到进程,就可以调试了。安装好服务后,就可以在win7服务管理里面,管理刚刚启动的服务了。

 安装成功后可在服务中看到

 在服务程序中可以看到添加的服务

可以看到程序的日志记录

另外一个方法是生成安装exe程序

1.解决方案右键=》新建项目=》选择安装程序

2.安装项目右键=》添加=》项目输出,选择主项目

3.安装项目右键=》视图=》自定义操作

4.自定义操作=》安装右键=》选择主输出

5.卸载右键=》选择主输出

6.若有文件需要添加到安装后的文件夹中=》点击应用程序文件夹=》添加=》文件,选择文件。安装后就会生成指定文件。

7.生成程序,完成,Setup文件夹中找到exe安装文件执行就 OK了。卸载也是执行此exe,按提示下一步就OK。

作者:欢醉
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


一、需求

我们有时候可能会想要做一些定时任务,例如每隔一段时间去访问某个网站,或者下载一些东西到我们服务器上等等之类的事情,这时候windows service 是一个不错的选择。

二、实现

1、打开Visua studio2013新建一个windows Service程序,我命名为TimerService

image

注意,这里的.NET Framwork框架的选择要与你电脑上的框架一致,我这里选择的是4.0

2、在Service1设计器中右击空白处选择查看代码

image

3.在Service1.cs中设定定时的时间间隔以及定时执行的任务这里的Onstart方法定义定时器的开始执行,执行的时间间隔,以及时间间隔达到后所要执行的方法,我这里是执行了一个文件写入的方法,代码如下

复制代码

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.IO;using System.Linq;using System.ServiceProcess;using System.Text;using System.Timers;namespace TimerService
{    public partial class Service1 : ServiceBase
    {
        Timer timer;        public Service1()
        {
            InitializeComponent();
        }        protected override void OnStart(string[] args)
        {
            timer = new Timer(1000);
            timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
            timer.Start();
            WriteLog("服务启动");
        }        protected override void OnStop()
        {
            timer.Stop();
            timer.Dispose();
            WriteLog("服务停止");
        }        protected void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            WriteLog("服务执行中");
        }        protected void WriteLog(string str)
        {            string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
            StreamWriter sw = null;            if (!File.Exists(filePath))
            {
                sw = File.CreateText(filePath);
            }            else
            {
                sw = File.AppendText(filePath);
            }
            sw.Write(str + DateTime.Now.ToString() + Environment.NewLine);
            sw.Close();
        }
    }
}

复制代码

4、在Service1设计器中右击空白处,选择添加安装程序,会添加一个ProjectInstaller设计器

image

5、在ProjectInstaller设计器中选择serviceProcessInstaller,右击查看属性,将Account的值改为LocalSystem

image

6、在ProjectInstaller设计器中选择serviceInstaller1,右击查看属性,这里的ServiceName就是要在服务器的服务中显示的名称,我将其命名我TimerService

image

7、右击解决方案,点击生成解决方案

三、安装

1、打开刚刚新建建项目所在的文件夹,找到bin文件下面的debug文件夹,即D:\用户目录\我的文档\Visual Studio 2013\Projects\TimerService\TimerService\bin\Debug,里面有个TimerService.exe应用程序,就是我们所要执行的项目

2、打开文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319,可以看到里面有一个InstallUtil.exe的应用程序,这就是我们要的安装工具,这里的Framework的版本与我们项目的Framework版本保持一致

3、打开cmd输入cd C:\Windows\Microsoft.NET\Framework\v4.0.30319指令,然后再输入InstallUtil D:\用户目录\我的文档\Visual~1\Projects\TimerService\TimerService\bin\Debug\TimerService.exe,即可完成安装

image

4、启动任务管理器,点击服务,找到名称TemrService的服务,右击启动,即可将创建的定时服务启动,这里的服务名称就是我们在项目的serviceInstaller1的属性里面设置的serviceName

image

5、在我们的D:\用户目录\我的文档\Visual Studio 2013\Projects\TimerService\TimerService\bin\Debug文件下面会发现多了一个log.txt的文件,就是我们在项目中创建的文件,打开即可看到项目正常执行

image

四、卸载

要卸载应用服务也很简单,只需要在cmd中输入以下指令即可

InstallUtil /u D:\用户目录\我的文档\Visual~1\Projects\TimerService\TimerService\bin\Debug\TimerService.exe

image


vs 2010创建Windows服务定时timer程序:

版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:  http://www.cnblogs.com/2186009311CFF/p/6401576.html

主要参照:

http://www.cnblogs.com/getpower/p/5703838.html 和 http://www.cnblogs.com/zhangs1986/p/3502026.html

出现问题:Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security

2种方法处理:

一、右键单击“以管理员身份运行”Visual Studio Command Prompt即可

二、以管理员身份运行vs,然后打开项目,再执行InstallService程序安装服务。

参考:http://blog.csdn.net/joyhen/article/details/42262305

 

关键步骤为:

1、更改启动项目:在Program.cs里改

2、serviceProcessInstaller1的主要属性,Accout:账户类型,LocalSystem本地系统服务;

3、以管理员身份运行cmd:输入cd C:\Windows\Microsoft.NET\Framework\v4.0.30319   ,运行,找到对应.net框架的目录

然后:

安装服务:installutil *:\*\*.exe

卸载服务:installutil /u *:\*\*.exe

*:\*\*.exe为window服务程序bin\debug下的exe运行文件。

 

具体操作后续更新,希望能帮到您!


介绍

forfiles是windows自带的一个批量删除命令,对于时间的判断是通过文件自身的修改日期属性进行判断,使用它来对历史文件进行判断删除是个不错的选择。

 

 

语法

forfiles [/p Path ] [/m SearchMask ] [/s ] [/c Command ] [/d [{+ | - }] [{MM / DD / YYYY | DD }]]

 

[/p Path ]:指定路径,当然目录可以用“.” [/m SearchMask ]:搜索方式,默认是*.*  [/s ]:遍历子目录进行搜索,包括当前目录 [/d [{+ | - }] [{MM / DD / YYYY | DD }]]:选择日期大于或等于(+ )(或者小于或等于(- ))指定日期的文件,默认+ 其中MM / DD / YYYY 是指定的日期,DD 是当前日期减去DD 天,默认是DD 。DD 的有效范围是0 - 32768 例如: /d -15:查找15天之前的文件 /d 2016/12/9:指定查找的文件日期为2016/12/9 [/c Command ]:指定要执行的命令,格式为[ /c "cmd /c rd /s/q @path" ];双引号里面的/c后接需要执行的命令。 变量: @file  显示文件名 @fname  显示无扩展名的文件名 @ext  显示文件扩展名 @path  显示文件的完整路径 @relpath  文件的相对路径 @isdir  如果文件类型是目录,则计算值为TRUE,否则值为FALSE @fsize  显示用字节表示的文件大小 @fdate  显示文件中上次修改的日期戳 @ftime  显示文件中上次修改的时间戳

示例

1.查看“d:\backup\data”目录下名称包含“--”,且修改时间大于15天的文件或者文件夹

forfiles.exe /p d:\backup\data /m *-*-* /d -15 /c "cmd /c echo @path"

2.删除,/s/q(/s文件夹下存在文件也删除,/q强制删除不提示)

forfiles.exe /p d:\backup\data /m *-*-* /d -15 /c "cmd /c rd /s/q @path"

 

备注:路径不支持"\\url\"这种共享路径,rd(删除文件夹),del(删除文件)

总结

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》


安全架构css

大型网站系统架构图

 

核心架构要素前端

大型网站系统架构图

 

高性能架构web

大型网站系统架构图

 

高可用架构浏览器

大型网站系统架构图

 

伸缩性架构缓存

大型网站系统架构图

 

可拓展性架构安全

大型网站系统架构图

 

* 前言服务器

前端架构网络

应用层架构session

安全架构 服务层架构 数据采集与监控架构

存储层架构

后台架构

数据中心机房架构

* 前端架构

用户请求到达网站应用服务器以前经历的环节,一般不包含网站业务逻辑,不处理动态内容。

1 浏览器优化技术: 页面缓存、合并HTTP减小请求数、使用页面压缩。

2 CDN: 内容分发网络, 部署在网络运营商网络。 静态页面分发到用户最近的CDN服务器。

3 动静分离: 静态资源(js、css)独立部署在专门的服务器集群, 和web动态服务分离, 使用专门

的域名(二级)。

4 图片服务: 独立部署图片服务器集群。

5 反向代理: 应用服务器、静态资源服务器、图片服务器以前, 提供页面缓存服务。

6 DNS: 域名服务, 能够用DNS负载均衡。

* 应用层架构

处理网站主要业务逻辑的地方。

1 开发框架。 分离美工和开发工程师,易于写做,内置安全策略。

2 页面渲染。 将动态内容和静态业务模板集成, 造成最终效果。

3 负载均衡。

4 session管理。 应用服务器集群,一般设计成无状态的,不保存上下文信息,须要专门的机制

管理session, 集群或者跨集群共享session。

5 动态页面静态化。 访问量特别大,且更新不频繁的动态页面静态化。

6 业务拆分。

7 虚拟化服务器。 一台物理机虚拟化多台虚拟服务器。

* 服务层架构

1 分布式消息。 低耦合。 更快的响应, 削峰填谷。

2 分布式服务。 SOA架构。

3 分布式缓存。

4 分布式配置。 配置修改实时推送。

大型网站系统架构图

 

想了解能够私信我!

1 SpringBoot+ 高并发消息处理 EDM?项目 实战

2 SpringBoot ELK?分布式 数据分析

3 Netty?高 并发 UTS?项目实战

4 SpringCloud?微服务+NoSQL+ 负载均衡平台设计