window服务定时自动操作

前段时间写了一个知识共享的邮件,是关于.net启动加速的方法,其中在方法三中描述了使用了编写一个程序定时访问的方法。那么就有一些小伙伴在这种程序处理的方法上有些疑问,最普遍的就是,如何让它们在远程访问注销、重启之后还能自动运行?当然,大家都知道答案是做成服务即可。但是做成可靠的系统服务却不是那么容易的,通常的情况下,大家都采用以下几种方法:

 

1,  在网站中部署一个专门执行程序的页面,将需要实现的逻辑代码放到该页面中,然后通过一些脚本语言,访问这个页面(例如写.bat或者.py文件),并将Windows操作系统的“执行计划”=》“创建任务”中运行。此方法的好处在于运行情况受系统管束,可以直观的看到执行的成功情况,且一次出错不影响下次的动作。缺点也非常明显:大动作网页容易超时、脚本容易执行失败且不容易调试、需要选择正确的权限和用户执行、需要配置参数等等。【虽然我最早就是用这种方法做的,但是实在是不推荐使用这个方法,后期维护什么的极容易出问题,交给新人十次有九次出错啊】

2,  专门写一个exe,其中使用定时器或者thread.sleep来控制时间间隔。然后远程登录系统直接执行。此方法的好处在于完全可控、可调试、好维护,定时任务就是项目代码的一部分。缺点也很明显:一旦一不小心注销了,或者重启,那这个任务就完蛋了,无法自动恢复动作。

3,  此方法是2的进阶,直接写成一个服务。好处不多说,坏处是调试和控制过程极其难受,尤其对不习惯调试服务的同事而言,恐怕每次都非常痛苦。

4,  此方法是1和2的合并。也就是写一个专门的exe,然后设置定时任务执行。此方法的问题在于:控制部分是由系统执行,而运行部分是代码执行,如果需要统一协调或者进行统一的程序处理则无法实现了【当然,还要做一堆设置,也是需要选择正确运行的账户啊、权限啊什么的,也挺闹心的】

 

其实就是三个大类:“定时任务”,“自己写服务”,“远程开一个程序”。各有利弊吧,大家可以选择性使用。

 

而最近我这里使用的方法是这样的【和方法二类似】:

 

编写一个EXE,使用定时器或者thread.sleep来控制时间间隔。然后使用“instsrv.exe”和“srvany.exe”构建系统服务。好处在于其实就是相当于系统有个服务帮我看着这个exe运行,至于exe内部运行成什么样子完全是由exe自己决定的;而且不用做那么多设置,更新或者重置的话操作也很简单【主要是为了傻瓜化处理服务程序】。扩展功能或者多次部署什么的都非常容易【直接代码中写就好了,不行的话再开个服务即可】

 

具体操作过程如下:

 

一,构建服务过程

 

1,将附件解压出的文件拷贝到要设置成Windows服务的文件目录下

2,用记事本打开Service_install.bat,修改其中的

set ServiceName=服务名称【将在系统的“服务”列表中出现】

set ExeName=程序名称【希望做成服务的程序名称,最好带上.exe后缀】

3,使用管理员权限运行Service_install.bat即可

 

 

二,删除服务过程

1,用记事本打开Service_install.bat,修改其中的

set ServiceName=服务名称【在系统的“服务”列表中出现的名称】

2,使用管理员权限运行Service_del.bat即可

 

完全傻瓜化处理,简单方便。SVN地址:下 目录:简单构造Windows服务

 

PS:需要注意的是,如果是做成exe的程序,必须使用无界面的“控制台程序”,并且要做好容错和运行Log。

转载于:https://www.cnblogs.com/CoChe/p/6474331.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值