玻璃*杯

软海拾贝
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

需求:没隔一段时间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
执行成功,至此问题解决.

这种解决方法始终不太理想,不知道是否有其他更好的方法.