3

我有一个使用反引号在 Windows 上调用程序的 Perl 脚本。当我在命令提示符下运行它时,它工作正常。当我使用 Windows 任务调度程序运行它时它停止工作。这是在带有 ActiveState Perl 的 Windows Server 2008 x64 上。它给我一个错误,无法识别为内部或外部命令、可运行程序或批处理文件。一旦我改变对程序的调用以指向程序的完整路径,它就会再次工作。

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

老实说,我的环境比这更复杂,但这就是我将其缩小到的范围。我实际上有一个带有批处理文件的任务计划,该批处理文件运行一个 php 脚本,该脚本本身运行 perl 脚本,然后运行该程序。我之前没有提到的堆栈的其余部分似乎可以访问 %PATH%,因此批处理文件运行“php ...”并且 php 脚本运行“perl ...”然后 perl 脚本失败使用反引号运行“程序名”时。我已经剥离了批处理文件和 php 脚本,并且仅使用任务调度程序和 perl 的行为仍然存在。

4

3 回答 3

2

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

我找到了两个解决方案。

一种是重新启动机器。

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

于 2012-05-13T18:38:49.757 回答
0

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

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

于 2012-05-11T23:26:22.803 回答
0

我刚刚遇到了同样的问题,或者至少是类似的问题。我不会告诉你我调查的血腥细节。解决方案是 UAT 挡道了。

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

希望这可以帮助

于 2012-05-30T17:45:38.480 回答