【问题标题】:Passing arguments to a console application将参数传递给控制台应用程序
【发布时间】:2012-05-08 09:39:16
【问题描述】:

我能够使用以下方法成功地将参数传递到控制台应用程序:

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 测试主题行测试正文行

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

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

数据传递正确,只是接收控制台应用程序只能接收由空格分隔的字符串数组。因此,第 4 个和第 5 个参数分别是“测试主题行”和“测试正文行”,控制台应用程序按以下方式处理它:

args[3] = 测试

args[4] = 主题

args[5] = 行

args[6] = 测试

args[7] = 正文

args[8] = 行

那么,代替这个,如何将“测试主题行”和“测试主体行”分别视为数组中的一项?

【问题讨论】:

  • 参数必须用空格或制表符分隔。用空格替换格式字符串中的逗号。

标签: c# windows console


【解决方案1】:

您需要将参数括在引号中("),就像

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多