为什么Windows计划任务需要“启动”?

我们开发了一个可以在Windows或Linux上部署的Web应用程序。 Linux实现使用cron,而Windows使用计划任务来运行单个PHP脚本,该脚本处理我们系统的所有计划任务。

该任务在安装过程中使用schtasks进行计划,如:

这一直在W2003和W2008下工作。 一个星期前,一位客户报告说,计划的任务没有运行。 他正在Windows 2008上运行。我们一遍又一遍地检查,最后通过input包含.vbs脚本的文件夹作为计划任务的“start in”文件夹来解决问题。

这就是说,没有办法设置schtasks的“start in …”值,而不使用任务的XML定义。 XML定义在Windows 2003中不起作用,所以我将不得不添加Windows版本检测到安装程序,额外的testing等(我想尽可能避免这种情况)。

我注意到关于安装的唯一非典型的事情是,系统安装在D:\而不是默认的C:\Program Files (x86)\ ,但我不明白这是怎么回事。 所有脚本中的所有path都是绝对的。

任何人都可以提出一个合理的解决scheme?

“开始”主要是为了确保在任务中有相对path运行时,它能够理解运行脚本的目录。

这就是说,这个链接可能会帮助你: https : //stackoverflow.com/questions/1020023/specifying-start-in-directory-in-schtasks-command-in-windows

解决scheme到底是什么?

值的start in正是它听起来像应用程序/程序/脚本启动的目录。 这对于何时调用其他资源至关重要。 如果它调用somecustom.exe不在目录中的那个start in somecustom.exe ,它将不会被find,你的应用程序/程序/脚本将会出错。 如果你完全按照path调用所有的东西,那应该没有关系,但是你所描述的行为似乎表明它并没有真的这样做,所以你可以尝试纠正这种行为,或者快速的解决方法(如果丑陋的蹩脚的解决scheme,实际得到的代码是正确的)将目录添加到%PATH%variables,所以Windows将始终检查目录时调用可执行文件没有引用的path。

如果你在Windows 2008/7 / Vista下工作,只要你不试图在SYSTEM帐户下运行这些任务,你也可以使用一个开关start in schtasks /v1设置start in目录 。 我想我宁愿让开发人员debugging他的代码,但YMMV。

在D驱动器中运行脚本时遇到问题。 例如:即使明确指定了目录驱动器,文件也不会移动到备份文件夹。 但是,当我在开始在D:\脚本指定参数运作良好。