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 つの引数に対して次のようなものを渡すと (「テストの件名行」は 1 つの引数であり、「テストの本文行」は別の引数であることに注意してください):

SendPlainEmail 25498 test@test.com テストの件名 テストの本文

ただし、コンソール アプリは、9 つ​​の引数 (単語ごとに 1 つ) を持つものとして解析します。

SendPlainEmail 25498 test@test.com テストの件名 テストの本文

件名と本文が単一の引数として扱われる 5 つの引数だけを使用して、parms をコンソール アプリに渡す方法はありますか?

ご覧のとおり、Process.Start ステートメントの直前で、psi.arguments プロパティに何が含まれていますか。

データは正しく渡されています。受信側のコンソール アプリケーションは、スペースで区切られた文字列の配列しか受信できません。したがって、4 番目と 5 番目の引数がそれぞれ「テストの件名行」と「テストの本文行」である代わりに、コンソール アプリはそれを次のように処理します。

args[3] = テスト

args[4] = 件名

args[5] = 行

args[6] = テスト

args[7] = 本体

args[8] = 行

では、代わりに、「テストの件名行」と「テストの本文行」をそれぞれ配列内の 1 つの項目として扱うにはどうすればよいでしょうか。

4

1 に答える 1

2

パラメータを引用符 ( ) で囲む必要があるため、次"のようになります。

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

そうでなければ、あなたの主題がどこで終わり、あなたの体がどこから始まるのかわかりません。;)

于 2012-04-28T17:14:29.263 に答える