从Windows任务计划程序运行的Perl脚本生成的进程不能访问%PATH%

我有一个Perl脚本,使用反引号在Windows上调用一个程序。 当我在命令提示符下运行它时,它工作正常。 当我使用Windows任务调度程序运行它时,它停止工作。 这是在Windows Server 2008 x64上使用ActiveState Perl。 它给我一个错误是不能识别的内部或外部命令,可操作的程序或batch file。 一旦我改变我的呼吁程序指向程序的完整path它再次运作。

所以当它在带反引号的任务计划中运行时,会阻止它看到Windows环境variables,特别是运行时的%PATH%variables。 反引号产生的shell可能会丢失一些东西? 我应该使用不同的命令来执行系统调用吗? 还是有一个任务调度程序设置,将解决这个问题? 如果有人能帮助,我将不胜感激。

说实话,我的环境比这个更复杂,但这是我缩小到的范围。 我实际上有一个batch file的任务计划,运行一个PHP脚本本身运行的Perl脚本,然后运行该程序。 我之前没有提到的其他堆栈似乎可以访问%PATH%,因此batch file运行“php …”,php脚本运行“perl …”,然后perl脚本失败当使用反引号运行'程序名'时。 我已经剥离了batch file和PHP脚本,行为仍然只是任务调度程序和Perl持续存在。

Solutions Collecting From Web of "从Windows任务计划程序运行的Perl脚本生成的进程不能访问%PATH%"

从perl运行的路径基本上帮助我解决了这个问题。 问题不是perl本身,而是在任务计划程序服务重新启动之前,%PATH%变量的更改不显示给任务计划程序。 据我所知,没有重启机器的情况下无法重启任务调度器。 因此,程序路径在任务计划中运行时没有显示出来,而是显示在命令行中。

我找到了两个解决方案。

一个是重新启动机器。

其次是确保您的任务计划设置为“运行用户是否已登录”(最接近的命令行参数是该schtasks的/ NP参数)由于某种原因在该场景中运行计划给出它访问当前的%PATH%变量。 我不确定,但我认为这会破坏需要与桌面交互的脚本。

如果您具有管理权限,则可以定义系统范围%PATH% 。 用户的%PATH%增加了它。 在用户帐户下的系统上运行的常规程序应该能够看到系统范围%PATH%

我不知道您是从GUI安排任务还是使用AT ,但预定作业无法访问用户环境变量可能会有所帮助。

我刚刚遇到了这个问题,至少也是类似的问题。 我会告诉你我调查的细节。 解决的办法是,UAT正在阻碍。

我的Windows 7机器上有本地管理员权限。 我必须进入管理工具>本地安全策略>安全选项和ENABLE用户帐户控制:以管理员批准模式运行所有管理员。 重新启动 – 瞧。 我的脚本现在运行在任务计划程序中。

希望这可以帮助