問題描述:
批處理文件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增加相應權限
整個解決過程就是這樣,希望能幫上同遇此問題的朋友
