2016-06-17 1 views
0

winformアプリケーションがあり、プロジェクトプロパティの[Debug]タブの[Command Line arguments]テキストボックスに引数 "1-2-c:\ temp-test"を入力します。読み取るコードは次のとおりです。Winform appコマンドライン引数IndexOutOfRangeException

String[] arguments = Environment.GetCommandLineArgs(); 

string exeFilename = arguments[0]; 
string temp = arguments[1]; // return the argument string value. e.g."1-2-c:\temp-test" 



string[] args = temp.Split('-'); 
    try 
     { 
      string first = "", second="", third="", fourth = ""; 
      if (args != null && args.Count() > 0) 
      { 
       first = string.IsNullOrEmpty(args[0]) ? "1" : args[0]; 
       second = string.IsNullOrEmpty(args[1]) ? "2" : args[1]; 
       third = string.IsNullOrEmpty(args[2]) ? @"c:\temp\" : args[2]; 
       fourth = string.IsNullOrEmpty(args[3]) ? "test" : args[3]; 



      } 
catch(Exception ex) 
     { 
      string argsTest = ""; 
      if (!string.IsNullOrEmpty(args[0])) 
       argsTest = args[0]; 
      if (!string.IsNullOrEmpty(args[1])) 
       argsTest = argsTest + " "+ args[1]; 
      if (!string.IsNullOrEmpty(args[2])) 
       argsTest = argsTest + " " + args[2]; 
      if (!string.IsNullOrEmpty(args[3])) 
       argsTest = argsTest + " " + args[3]; 


      MessageBox.Show(argsTest + " \n Error: " + ex.ToString()); 
     } 

私は申込書のVisual Studioを実行すると、それが正常に動作しますが、私はビン\デバッグをダブルクリックし、.exeファイルに行くとき、私はIndexOutOfRangeException例外を取得しています。

もう1つは、コマンドプロンプトからの引数を使ってこのexeを実行するとうまくいきます。

私のexeファイルをダブルクリックすると例外が発生します。

解決に時間を費やしましたが、解決には至りませんでした。私は完全に立ち往生しています。任意の種類のヒント/コード/アドバイスは相当なものです。

+0

私はあなたを惜しまする[NDesk.Options](http://www.ndesk.org/Options)お勧めしますたくさんのトラブル。 – Filburt

答えて

1

.exeファイルを使用してファイルを開くときは、引数を指定していません。 .exe(コマンドプロンプトから、またはテストするために何かをハードコーディングする)を開くときに、引数を提供するために何らかの方法を使用していることを確認してください。

+0

もちろん、2番目の引数にアクセスする前にチェックを追加してください!メッセージは「引数が指定されていません。終了しています。 – TaW

0

実行可能ファイルから実行する必要がある場合は、コマンドライン引数を渡す必要があります。

  1. 実行ファイルを適切な引数で呼び出すバッチファイルを作成します。
  2. ショートカットを作成し、最後に引数を持つようにターゲットを変更します。

あなたの引数が指定されているかどうかを別にメモする必要があります。すなわち

if (arguments.Length >= 2) 
0

あなたが特定のインデックスにある項目を対処したいときはないstring.IsNullOrEmpty(args[...])ため、args.Lengthをチェックする必要があります:Visual Studioでのデバッグコマンドの設定

... 
String first = (args.Length > 0) ? args[0] : "1"; 
String second = (args.Length > 1) ? args[1] : "2"; 
String third = (args.Length > 2) ? args[2] : @"c:\temp\"; 
String fourth = (args.Length > 3) ? args[3] : "test"; 

... 
0

はなりません「埋め込み」彼らexeファイルに。これは、デバッグのためにexeを起動するときに、Visual Studioがこれらの引数を渡すことを意味します。 exeファイルの

ダブルクリックすると、効果的にこの命令することを意味し、引数を渡すません:

string exeFilename = arguments[0]; 

は、あなたが見ている例外を生成します。

迅速な解決が進む前に、引数の数をテストするために、次のようになります。

if(arguments.Lenght >= 4){ 
    //...do stuff... 
} 
+0

それはまったく解決策ではありません。解決策は適切なチェックと実際に引数を渡すことです – TheLethalCoder

+0

うん、私は彼がキャッチブロック(まだ悪い!)の配列にアクセスしていたことに気付かなかった。私の答えを編集しました。 –

+0

迅速な対応のために皆様に感謝します。このコードは単なるテストコードでした。ソリューションと提案は正常に動作します。 – Morshed

関連する問題