DOBON.NET DOBON.NETプログラミング掲示板過去ログ

自前のアプリ同士での呼び出しで引数の渡し方

環境/言語:[Windows Vista/7 C# VC2010 Winアプリ]
分類:[.NET]

自前のアプリから自前のアプリを引数を付けて呼び出したいのですが、呼び出され側で「インデックスが配列の境界外」のエラーが出ます。

呼び出し側のコード
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "ReportLite.exe";

proc.StartInfo.Arguments = " 1 2 3 4 5 6 7 8 9";
proc.StartInfo.WorkingDirectory = "Report";
//proc.StartInfo.UseShellExecute = false;
proc.Start();

// プロセスが終了したときに Exited イベントを発生させる
proc.EnableRaisingEvents = true;
// イベントハンドラがフォームを作成したスレッドで実行されるようにする
proc.SynchronizingObject = this;

// 起動したアプリの終了を待って処理したい
proc.WaitForExit();

呼ばれる側
private void Form1_Load(object sender, EventArgs e)
{
    :
string[] args = Environment.GetCommandLineArgs();

if (args.Length == 10)
{
string txt = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}",
args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);

MessageBox.Show(txt); 確認のため受けた引数を表する


これを上記のアプリから呼ぶとエラーになります。
しかし、コマンプロンプトより「reportLite.exe 1 2 3 4 5 6 7 8 9」
などとして呼ぶと正しくメッセージボックスを表示します。

正しい、引数の渡し方を教えてください。
■No29071に返信(Hiroさんの記事)
> 自前のアプリから自前のアプリを引数を付けて呼び出したいのですが、呼び出され側で「インデックスが配列の境界外」のエラーが出ます。
> ...
> これを上記のアプリから呼ぶとエラーになります。
> しかし、コマンプロンプトより「reportLite.exe 1 2 3 4 5 6 7 8 9」
> などとして呼ぶと正しくメッセージボックスを表示します。
>
> 正しい、引数の渡し方を教えてください。

引数の渡し方は問題ありません。
あなたのプログラムを実行してみましたがエラーは起きません。
あくまで仮定ですがproc.StartInfo.FileName に入れるパラメータをまちがえているのではないでしょうか?(間違ってたらすいません)
ReportLite.exeの保存場所をもう一度確認するか、あるいは絶対パスで起動してみてください。

絶対パスの例
proc.StartInfo.FileName = @"C:\Sample\Samp\...\ReportLite.exe";
■No29072に返信(itiさんの記事)
> 引数の渡し方は問題ありません。
> あなたのプログラムを実行してみましたがエラーは起きません。

このアドバイスをいただいたので他の部分を含めて調べたところ引数の後の別のファイルの読みで起きていたことがわかりました。

お騒がせして申し訳ありません。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板