以下を使用して、引数をコンソール アプリケーションに正常に渡すことができます。
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 つの項目として扱うにはどうすればよいでしょうか。