需求:没隔一段时间service(假设serivce是部署到d:\service\目录下)调用一下ftp.bat文件
Ftp.bat的内容如下:
ftp -s:FTPLogin.txt test.ftp.com
它只是调用FTPLoing.txt中已经写好的指令
FTPLoing.txt的内容如下:
anonymous anonymous@mail.com cd /TEMP/ get TOTAL.ZIP c:\IM.ZIP bye
非常简单就是把total.zip下载为c:\im.zip
程序关键代码如下:
System.Diagnostics.Process p=new System.Diagnostics.Process(); p.StartInfo.FileName=AppDomain.CurrentDomain.SetupInformation.ApplicationBase+"\\ftp.bat"; p.StartInfo.UseShellExecute=false; p.StartInfo.RedirectStandardOutput =true; p.Start(); p.WaitForExit();
在一般的winform程序中测试一切ok,能正常下载total.zip
但是在service程序中同样的代码始终不能正常下载total.zip,why?
单步调试winform还是ok,单步调试serivce还是不能正常下载total.zip,没办法在各个地方都记日志
然后仔细分析日志,其中的一行引起我的注意:C:\WINDOWS\system32>ftp -s:FTPLogin.txt test.ftp.com
这不就是执行ftp.bat吗?至此问题找到了,就是执行目录的问题,执行的目录是system32目录,但是ftplogin.txt是在
你的serivce的执行目录下,找不到ftplogin.txt当然下载不成功了.
OK,修改FTP.bat文件,改为如下:
执行成功,至此问题解决.ftp -s:d:\service\FTPLogin.txt test.ftp.com
这种解决方法始终不太理想,不知道是否有其他更好的方法.