为Windows 7任务计划保驾护航

软件先锋 2015-12-31 03:30网络整理点击: 标签:

在日常使用中我们经常借助任务计划来自动完成很多任务,比如自动备份、后台升级等,但是在Windows 7的任务计划实际部署中,大家可能经常发现明明执行的程序或者批处理是准确无误,添加到任务计划后却无法执行。请教高手如何确保任务计划不失效。

【解题思路】

任务计划是指在特定的条件下(如用户登录、系统启动时),执行特定的程序(或批处理、脚本),默认任务计划是在后台自动运行的。因此如果任务计划失效,主要的原因有两个:一是调用的程序或者批处理代码出错,导致任务计划无法运行指定程序。二是运行账户权限不足,导致任务计划没有足够的权限运行指定的程序。因此解题的思路主要就从程序(或批处理)本身和账户权限的角度入手解决问题。

【解题方法】

解决程序本身错误引发的问题

因为在将程序(或者批处理)添加到任务计划运行的时候,我们一般都会预先运行一下。因此这里程序本身错误大多是由于没有指定正确的路径造成的。比如下面这样的一个批处理放置在桌面:

echo "test is ok!" >>test.txt

当我们在桌面直接双击或者在命令提示符运行的时候,批处理都会在当前目录下生成test.txt文件,这说明批处理代码是没有错误的。不过当我们添加到任务计划,重启后打开“控制面板→管理工具“,依次展开到“系统工具→任务计划程序→任务计划程序库”,可以看到添加的任务计划提示“正在运行”,但是却没有生成指定的“test.txt”文件(图1)。

1402rwjh1

显示批处理正在运行却无法生成指定文件

为什么会出现这个问题?原来我们在桌面直接双击或者在命令提示符运行上述批处理时,系统会自动将当前目录指定为“test.txt”文件的存放目录,上述批处理运行起来并不会有任何问题。但是当我们将这个批处理添加到任务计划运行时,任务计划无法自动指定执行批处理时所需的起始位置,导致上述批处理无法生效。因此解决的方法是重新为批处理指定正确的路径,比如改成下面的代码即可:

echo "test is ok!" >>d:\test.txt

此外,任务计划批处理本身也必须指定调用的具体路径。比如调用的是桌面快捷方式,如果右击快捷方式选择“属性→快捷方式”,这里的“起始位置”如果置空,在任务计划中运行时也会出错,解决方法同样是要指定具体快捷方式(图2)。

1402rwjh2

任务计划的快捷方式不能置空

解决权限不足引发的问题

大家知道在Windows 7中如果要运行带有盾牌标志的程序(即使你是管理员身份登录),系统就会弹出UAC(用户账户控制)提示,需要我们手动提权才能运行这些程序。因此如果任务计划执行的(或者任务计划执行批处理、脚本调用的)是带有盾牌标志的程序,系统的UAC就会启动拦截,从而导致任务计划无法在后台自动完成。

解决的方法自然是为执行程序提权,在任务计划窗口选中无法运行的任务,在常规选项下,运行用户选择本机管理员账户,单选“在用户登录时运行”,然后勾选“使用最高权限运行”,这样下次启动上述任务时就没有UAC的拦截了(图3)。

1402rwjh3

设置运行账户的权限

不过要注意的是,在Windows中有多个“会话”机制,每个用户登录都会新生成一个会话,每个会话中运行不同的桌面和程序,它们之间是独立的。我们可以启动任务管理器后,单击 “查看→选择列→勾选会话ID”,这样在进程列表就可以显示每个进程所处的会话(图4)。

1402rwjh4

查看进程会话ID

如果在常规属性中选择“不管用户是否登录都要运行”这个选项(或者运行账户是SYSTEM),任务计划就运行在会话0(当前账户登录则为会话1)。在0会话中,我们无法在当前桌面看到运行的程序,因此任务计划如果要运行的是GUI程序如启动迅雷、QQ,就必须选择当前用户运行,反之则可以选择SYSTEM运行,只要点击“更改用户和组”,然后在“输入要选择的对象名称”下输入“SYSTEM”,点击“确定”后就可以以SYSTEM身份运行任务计划了(图5)。

1402rwjh5

选择SYSTEM身份运行任务计划

小提示:

很多常用的程序如搜狗输入法的字库升级、Flash插件的自动升级、磁盘碎片定时整理都是通过任务计划进行的,不过系统自带任务计划组件无法查看到全部计划任务,我们可以到http://tinyurl.com/l3w8g9r下载AutoRuns,运行后切换到“计划任务”即可看到本机所有后台任务,其中标注红色的则表示路径错误,可以手动删除(图6)。

1402rwjh6

查看本机所有的任务计划

小知识:什么是会话?

用户登录到Windows系统之后,不管该用户是本地登录的,还是远程登录,系统都会为这个用户分配一个新的会话ID(SID)。会话是与用户的登录相关连的,它的含义是指用户登录之后的一种运行的环境,包括桌面、用户配置文件、分配的权限等。微软也是通过会话来将系统内核(运行在会话0)和用户(会话1)隔离,从而保证系统有更好的稳定性。