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

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

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

schtasks该任务是在安装过程中安排的,例如:

这在 W2003 和 W2008 下始终有效。一周前,一位客户报告说计划任务未运行。他使用的是 Windows 2008。我们反复检查,最终通过将包含 .vbs 脚本的文件夹输入为计划任务的“启动位置”文件夹解决了该问题。

话虽如此,如果不使用任务的 XML 定义,就无法设置“开始于...”值schtasks。XML 定义在 Windows 2003 中不起作用,所以我必须在安装程序中添加 Windows 版本检测、附加测试等(如果可能的话,我希望避免这种情况)。

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

有人能为此提出一个合理的解决方案吗?

答案1

“开始于”主要是为了确保如果在要运行的任务中有相对路径,它就知道在哪个目录中运行脚本。

话虽如此,这个链接可能会对你有帮助:https://stackoverflow.com/questions/1020023/specifying-start-in-directory-in-schtasks-command-in-windows

答案2

解决方案到底是什么?

start in值就是其字面意思,即应用程序/程序/脚本启动的目录。这对于调用其他资源时很重要。如果它调用somecustom.exe不在该start in目录中的资源,则将找不到它,并且您的应用程序/程序/脚本将出错。如果您完全按路径调用所有内容,则应该没有关系,但您描述的行为似乎表明它实际上并没有这样做,因此您可以尝试纠正该行为,或者快速的解决方法(如果丑陋且有点糟糕的解决方案实际上使代码正确)是将目录添加到变量中%PATH%,因此当调用可执行文件而没有引用路径时,Windows 将始终检查目录。

如果你使用的是 Windows 2008/7/Vista,你也可以使用开关设置start in目录schtasks /v1,只要您不尝试在该SYSTEM帐户下运行任务即可。我想我更愿意让开发人员调试他的代码,但 YMMV。

相关内容