2012-04-27 92 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" 

否则它也不会知道你的主题结束,你的身体开始。 ;)

相关问题