您的位置:首页 > 其它

(TIP)service使用process类调用bat文件时应该注意的一个地方

2006-06-30 11:24 585 查看
需求:没隔一段时间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

执行成功,至此问题解决.

这种解决方法始终不太理想,不知道是否有其他更好的方法.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: