篇一:Windows 自动定时执行任务的几种实现方法
常见的方法有三种:
Windows 任务计划程序
Windows Service
SQL Agent 的 Job
这三种方法大多数人都用过,我在这里只做一个比较简单的介绍和小结,后续,我会用一个轻量型的.Net Windows Service Jobs的作为例子介绍如何定制Windows Service以及如何让Windows Service 自动定时执行任务。
首先,我们来看:使用 Windows 任务计划程序 如何创建自动定时执行任务:
界面方式: 计算机(右键)->管理 ,然后就可以打开 “计算机管理”界面,在界面的左侧有一个 系统工具->任务计划程序 ,在此我们可以创建定时执行的计划任务,并且可以为每个任务添加触发器和具体的操作。
具体的使用方法应该很简单,这里就不再一一介绍。
CMD 命令行方式: 主要命令是 SchTasks (另外还有 AT命令,该命令用来调用或者执行已经存在于Task Schedule列表中的Task). 命令行形式可以用于制作安装和部署包。如果用界面方式的话,安装和部署都不太方便。
SchTasks /: 查看 SchTasks命令,
SCHTASKS /parameter [arguments]
描述:
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。
参数列表:
/Create创建新计划任务。
/Delete删除计划任务。
/Query 显示所有计划任务。
/Change更改计划任务属性。
/Run按需运行计划任务。
/End中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/ 显示此帮助消息
Windows 任务计划程序需要:具体的任务执行程序(exe,批处理);而通过设置,让Windows来控制具体的执行的具体时间,重复度,触发条件,等。我们可以控制的是 具体的任务执行程序。 当然如果我们将什么时候定时执行任务,以及如何重复执行,触发条件等都写在程序里,也未尝不可,但是这样的话,就抹杀了Windows任务计划程序的特有功能了!
接下来,我们来看一下,Windows Service 如何解决自动定时执行任务。
利用Windows Service 解决自动定时执行任务的方案是,制作一个Windows Service程序,在Service内部部署好具体的任务程序,以及控制任务什么时候执行,如何重复,等等。他的可控性和自定义空间相比任务计划程序大,但是自己的工作量相对而言就大一些。
有关如何制作Windows S
ervice程序,我在下篇文章中会介绍,这里只介绍如何部署和卸载。
部署Windows Service只能通过命令行形式来部署。但是具体的命令有两种: InstallUtil 和 sc
(也可以在Windows Service的Program启动点中添加自定义的Installer和启动参数来实现不用
InstallUtil和sc来安装和卸载,最后还是要通过命令行形式输入运行参数来安装,这个我会在后续的文章中详解如何在Windows Service中添加启动参数和自定义Installer)
InstallUtil.exe是.NetFramework自带的工具,一般他的路径在
C:WindowsMicrosoft.NETFrameworkversion 下。
使用方法: installutil [/uninstall][option [...]]assemblyname
其中 assemblyname 必须使用程序集的版本、区域性和公钥标记完全限定程序集名称
SC 是系统自带的命令,不需要.Net Framework(当然如果希望运行C#程序,.Net Framework是必须的,所以一般情况下我们都可以用InstallUtil命令来部署和卸载)。我以前做开发Service时碰到的一个问题是,当我用InstallUtil部署好一个Service,但由于程序更新,需要卸载后重新部署,这个时候,就出现用InstallUitl /u 无法卸载的情况,具体的原因还不太明白,但是MSDN上说明了 InstallUtil 安装的时候是启用事务的,但是卸载的时候不启用事务,会不会是这个原因呢?? 但是,这中情况下,我却可以用 sc 命令来卸载。
有关sc命令的使用方法,sc /:
描述:
用法:
sc[command] [service name]...< option2="">< option1="">
选项的格式为 “servername”
键入 "sc [command]" 可以获得有关命令的进一步帮助
命令:
query-----------查询服务的状态,
或枚举服务类型的状态。
queryex---------查询服务的扩展状态,
或枚举服务类型的状态。
start-----------启动服务。
pause-----------向服务发送 PAUSE 控制请求。
interrogate-----向服务发送 INTERROGATE 控制请求。
continue--------向服务发送 CONTINUE 控制请求。
stop------------向服务发送 STOP 请求。
config----------更改服务的配置(永久)。
description-----更改服务的描述。
failure---------更改服务失败时执行的.操作。
failureflag-----更改服务的失败操作标志。
sidtype---------更改服务的服务 SID 类型。
privs-----------更改服务的所需权限。
qc--------------查询服务的配置信息。
qdescription----查询服务的描述。
qfailure--------查询失败时服务执行的操作。
qfailureflag----查询服务的失败操作标志。
qsidtype--------查询服务的服务 SID 类型。
qprivs----------查询服务的所需权限。
qtriggerinfo----查询服务的触发器参数。
qpreferrednode--查询首选的服务 NUMA 节点。
----------(从注册表)删除服务。
create----------创建服务(将其添加到注册表)。
control---------向服务发送控制。
sdshow----------显示服务的安全描述符。
sdset-----------设置服务的安全描述符。
showsid---------显示相应于假定名称的 SID 字符串。
triggerinfo-----配置服务的触发器参数。
preferrednode---设置首选的服务 NUMA 节点。
GetDisplayName--获取服务的 DisplayName
GetKeyName------获取服务的 ServiceKeyName。
EnumDepend------枚举服务的依存关系。
下列命令不要求服务名称:
sc
< option="">< select="">
boot------------(ok | bad) 指示是否将上一次启动保存为
最近一次已知的正确启动配置
Lock------------锁定服务数据库
QueryLock-------查询 SCManager 数据库的 LockStatus
示例:
sc start MyService
是否想参阅 QUERY 和 QUERYEX 命令的帮助[ y | n ]:
y
QUERY 和 QUERYEX 选项:
如果查询命令带服务名称,将返回
该服务的状态。其他选项不适合这种
情况。如果查询命令不带参数或
带下列选项之一,将枚举此服务。
type= 要枚举的服务的类型(driver, service, all)
默认 = service)
state=要枚举的服务的状态 (inactive, all)
(默认 = active)
bufsize= 枚举缓冲区的大小(以字节计)
(默认 = 4096)
ri=开始枚举的恢复索引号
(默认 = 0)
group=要枚举的服务组
(默认 = all groups)
语法示例
sc query - 枚举活动服务和驱动程序的状态
sc query eventlog - 显示 eventlog 服务的状态
sc queryex eventlog - 显示 eventlog 服务的扩展状态
sc query type= driver- 仅枚举活动驱动程序
sc query type= service - 仅枚举 Win32 服务
sc query state= all - 枚举所有服务和驱动程序
sc query bufsize= 50 - 枚举缓冲区为 50 字节
sc query ri= 14- 枚举时恢复索引 = 14
sc queryex group= "" - 枚举不在组内的活动服务
sc query type= interact - 枚举所有不活动服务
sc query type= driver group= NDIS - 枚举所有 NDIS 驱动程序
上面的用法都是来自系统help, 具体使用很简单,试一试就OK 了。
Windows Service 是一种完全自定义控制的实现自动定时执行任务的方法,可以自定义的东西很多,灵活性很高,所以使用起来可能会比 Windows 任务计划程序稍微复杂一些,适合灵活度和扩张性要求高的情况。
最后,我们简单介绍一些 SQL Agent中Job。
SQL Agent 是 SQL Server的一个服务之一,用之前,我们需要启动 SQL Agent Windows Service. 这个只适用于数据库方面的数据定时更新,定时发送邮件,等等与数据库相关任务,但是牵涉到桌面应用方面的可能就无能为力了,这里不再多介绍了!
总而言之,使用何种方法来实现任务的定时的按计划执行 ,需要根据具体的情况来定:
仅仅与数据库相关的,用SQL Agent
不需要考虑太多灵活性和扩展性的,用Windows 任务计划程序
灵活度高,需要考虑扩展应用(必须添加Job,按照自定义方式执行Job,... ...),那我们可以选择Windows Service
接下来的文章,我会用一个比较简单的例子,介绍如何构建,部署Windows Service!
企业管理器
--管理
--sql server(WINDOWS平台上强大的数据库平台)代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
Update City Set IsAccess=0
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排--定为每天调度一次,时间为18:40即可
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
篇二:windowsxp计划任务设置方法(附常见错误解决)
计划任务应该是很老的一个系统的功能的!记得从98下就有的! 也渐渐的被人淡忘了!昨天发现还是有不少人对此不是很熟悉!另外网上的资料似乎也讲的不是很多!那就研究一下,做个教程大家熟悉一下好了!
其实有的时候计划任务也是一个不错的功能的!废话不说!
先来说下个人对计划任务的理解吧! 顾名思义,计划任务就是让电脑在指定的时间内执行指定的动作(计划动作)
这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的!再通俗一些就是双击可以打开的!
其实再通俗一点也就是相当于你在那个时间里面进行了对某个东西对鼠标双击的操作! 当然只是我的理解!如有错误,欢迎指出!
搞清楚了是什么东西后,那就来看怎么设置吧!
打开"我的电脑",依次打开"控制面板"----- 任务计划 (晕管了,我还是习惯叫计划任务.HOHO )原来系统是叫任务计划,不然后会有一个这样的界面的:
因为是空的!所以什么都没有嘛!别着急! 双击打开 添加任务计划 (下面我就直接给图了!附带说明)可以看到!
当然是下一步了!然后会出来!
注意看红圈 说的很清楚了! 把想执行的东西 单击选中 然后下一步
说明: 如果 红圈内没有你想要设置计划的东西!那么点 浏览 然后找到想要添加的东西的位置! 选中 打开 如图:
接着就会出现下图:
给个名字,给个时间.这里我选择了每天,(你要是想,每周什么的也可以的啊)然后下一步
这个是具体是运行时间! 上个时间应该是时间频率!也就是多久运行一次的!HOHO 随便给一个!下一步!
这里值得注意一下的了! 就是说 这里的用户名和密码不能随便给的! 不少人以为随便给一个就可以了的!
这个必须和你系统的用户名和密码一致就可以了的! 我的这个用户是没密码的!所以我不写直接下一步!
完成!然后看一下任务计划里面多了一个"不得不爱"的计划任务!
如果到最后没有弹出什么错误提示的话!那么就恭喜你!设置好了!那么我们现在来右键运行一下看看!
弹出以WMP播放的不得不爱的MP3格式的音乐!设置成功!
然后每天到我设置的那个时间!这个东西就会自己弹出来放歌给我听了....!
总的来说设置过程还是比较简单的!