我有一个 SQL 2008 代理作业,只需Operating system (CmdExec)
一步:
C:\Scripts\Script.cmd
Script.cmd
运行CS-Script。
如果我运行C:\Scripts\Script.cmd
,一切看起来都很好——我得到了我预期的日志输出,然后echo %ERRORLEVEL%
显示为 0。
但是,当我通过 SqlAgent 运行它时 - 我得到了预期的日志输出,然后
The system cannot find the file specified.
Process Exit Code 1.
The step failed.
日志输出是完整且正确的,因此它会运行批处理文件和批处理文件调用的 EXE。CS-Script 做的最后一件事是:
Console.WriteLine("Exiting at 2009-09-22 16:10:32 with Status {0}", exitCode);
return (int)exitCode;
它完整地记录在输出中。
什么文件找不到?
清除 CS-Script 的缓存就可以了。Procmon 并没有真正帮助,但确实显示了对用户缓存文件夹的点击
C:\Users\sql-agent-svc\AppData\Local\Temp\CSSCRIPT\Cache
,提示我尝试清除它。由于它是每个用户的缓存,因此以管理员身份运行 CS-Script 手动使用没有问题的不同缓存。
据我了解,缓存只是为了避免重新编译未更改的脚本 - 所以它真的不应该引起任何问题。但是,删除它并让 CS-Script 重新创建它似乎有效。