将参数传递给控制台应用程序

时间:2012-04-27 16:04:31

标签: c# windows console

我可以使用以下命令成功将参数传递到控制台应用程序中:

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 test@test.com测试主题行测试体系

但是,控制台应用程序会将其解析为有9个参数(每个单词一个):

SendPlainEmail 25498 test@test.com测试主题行测试体系

有没有办法将parms传递到控制台应用程序中,只有5个参数,主题和正文被视为一个参数?

因此,正如您所看到的,就在Process.Start语句之前,psi.arguments属性中包含的内容。

正确传递数据,只是接收控制台应用程序只能接收由空格分隔的字符串数组。因此,控制台应用程序分别将“测试主题行”和“测试主体行”分别作为第4和第5个参数处理,如下所示:

args [3] =测试

args [4] =主题

args [5] =行

args [6] =测试

args [7] = body

args [8] =行

那么,取而代之的是,我如何将“测试主题行”和“测试主体行”分别视为数组中的一个项目?

1 个答案:

答案 0 :(得分:2)

您需要在引号(")中包围参数,因此它就像

SendPlainEmail 25498 test@test.com "test subject line" "test body line"

否则它不知道你的主题在哪里结束,你的身体开始了。 ;)