问题描述:
批处理文件ftp.bat,包含下面内容:
ftp -s:ftp.txt
其中的ftp.txt是一段ftp命令,如下:
open ftp.site.com
name
password
quote PASV
put C:\a.txt
put D:\b.txt
quit
以上意思是上传本地C:\a.txt和D:\b.txt两个文件到目标ftp站点
双击和使用Windows任务计划都能执行成功
但是通过程序运行却失败
Process p = Process.Start(path); if (p != null) { p.WaitForExit(); p.Close(); }
调试得到下面的信息
System.InvalidOperationException
通过分析:这是因为ftp -s:ftp.txt命令中用了相对路径,而Process.Start启动的程序会默认取当前程式所在路径下的ftp.txt,
于是就会出现找不到文件的情况
有三个方案:
1.ftp.bat文件中换绝对路径,比如ftp.txt文件在C盘下,则改写为ftp -s:"C:\ftp.txt"(这个地方最好加双引号,否则路径中有空格就会出错)
2.使用ProcessStartInfo 来执行 Process.Start,通过ProcessStartInfo 指定程式的工作路径(WorkingDirectory)
3.将ftp.txt拷贝到当前程式的根目录下
还有一个注意点:
如果应用程序访问被拒绝,要给a.txt,b.txt和ftp.txt增加相应权限
整个解决过程就是这样,希望能帮上同遇此问题的朋友