我有一个C#应用程序执行批处理脚本,它将ftp命令写入文本文件,然后执行文本文件。它在手动执行时有效,但在从Windows任务计划程序(不是我最终将使用但用于调试目的)的调度程序执行时不起作用。
具体来说,当从调度程序运行时,脚本会执行,但参数不会被传递,并且ftp脚本文件在调用之前不会被覆盖,因此它只执行上一个作业剩下的任何脚本。但是,它会按预期覆盖记录ftp会话的.txt报告。同样,当手动运行时,一切正常。
安全策略阻止了对权限的大量修改,但我为作业帐户授予了对所有受影响文件夹的完全权限,并将“登录为批处理文件”权限添加到作业帐户。不需要将参数传递给C#应用程序。任何建议将不胜感激。
C#代码:
ProcessStartInfo psi = new ProcessStartInfo(scriptFile, paramList);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
//etc...
批处理脚本:
Set DIR=%~1
Set SUBDIR=%~2
Set SWITCH=%~3
cd "%DIR%Scripts\
ECHO USER user>FtpScript.txt
ECHO pass>>FtpScript.txt
ECHO lcd "%DIR%FilesToFtp\%SUBDIR%\%SWITCH%">>FtpScript.txt
ECHO lcd "%DIR%FilesToFtp\%SUBDIR%\%SWITCH%"\>>FtpScript.txt
IF "%SWITCH%"=="ONE" ECHO QUOTE SITE LRECL=100 RECFM=FB>>FtpScript.txt
IF "%SWITCH%"=="TWO" ECHO QUOTE SITE LRECL=200 RECFM=FB>>FtpScript.txt
IF "%SWITCH%"=="THREE" ECHO QUOTE SITE LRECL=300 RECFM=FB>>FtpScript.txt
ECHO MPUT "*.*">>FtpScript.txt
ECHO(>>FtpScript.txt
REM other commands, etc...
FTP -d -n -s:"%DIR%Scripts\FtpScript.txt" server > "%FPATH%Reports\%SUBDIR%_%SWITCH%_log.txt"
EXIT 0
提前致谢。