2012-04-27 144 views
0

我可以使用下面的順利傳遞參數到一個控制檯應用程序:將參數傳遞給控制檯應用程序

ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = Properties.Settings.Default.EmailBlasterAppPath; 

string subject = txtSubject.Text.Replace(@"""", @""""""); 
string emailbody = txtEmail.Text.Replace(@"""", @""""""); 
string args = String.Format("{0},{1},{2},{3},{4}", 
          "SendPlainEmail", 
          B2BSession.Doctor.DoctorId.ToString(), 
          DocEmail.Trim(), subject, emailbody); 

psi.Arguments = args; 
psi.UseShellExecute = false; 
psi.CreateNoWindow = true; 

Process process = Process.Start(psi); 

然而,一旦控制檯應用程序中,控制檯應用程序只能期望參數分隔單串一個空格(見下圖):

static void Main(string[] args) 

我的問題是,我傳遞主題行和郵件正文進入控制檯應用程序,但它僅在參數拿起第一個字。所以,如果我傳入類似的東西(注意「測試主題行」應該是一個參數,「測試主體行」將是另一個參數),總共5個參數:

SendPlainEmail 25498 [email protected]測試對象線路測試體線

但是,控制檯應用程序將解析它爲具有9個參數(每個字):

SendPlainEmail 25498 [email protected]測試受試者線路測試體線

有沒有辦法將參數傳遞給控制檯應用程序,只有5個參數,主題和主體被視爲一個參數爭論?

因此,正如您可以看到的,就在Process.Start語句之前,psi.arguments屬性中包含的內容。

正在正確傳遞數據,只是接收控制檯應用程序只能接收由空格分隔的字符串數組。所以,代替第四和第五參數是「測試受試者行」及「測試體線」,控制檯應用程序過程中它如下所示:

ARGS [3] =測試

ARGS [4] =受試者

ARGS [5] =線

ARGS [6] =測試

ARGS [7] =身體

ARGS [8] =線

那麼,代替這個,我怎樣才能將「測試主題行」和「測試主體行」分別作爲數組中的一項呢?

+1

參數必須用空格或製表符分隔。用空格替換格式字符串中的逗號。 – 2012-04-28 16:55:33

回答

2

你需要加上引號(")的參數,所以它就像

SendPlainEmail 25498 [email protected] "test subject line" "test body line" 

否則它也不會知道你的主題結束,你的身體開始。 ;)

相關問題