2011-08-02 21 views
1

私は最初に送られた同じコマンド引数を渡して自分自身を呼び出すことができるようにargで渡されるコンソールアプリケーションを持っていたいと思います。コンソールアプリケーションを引数で再帰的に呼び出す方法は?

私は、最初のコール印刷が「で実行されている:引数1」

static void Main(string[] args) 
{ 
    Assembly ass = System.Reflection.Assembly.GetExecutingAssembly(); 
    string cmd = Environment.CommandLine; 

    Process again = new Process(); 
    again.StartInfo.FileName = ass.Location; 
    again.StartInfo.Arguments = args[0]; 
    Console.WriteLine("Running with: " + args[0]); 
    System.Threading.Thread.Sleep(10000); 
    again.Start(); 
    return; 
} 

しかし、これをしようとするが、args配列が空であるため、2番目の呼び出しが失敗しました。

+3

おそらく 'アセンブリ 'は、お尻と呼ばれるのが好きではなかったかもしれません。 :) –

+1

プロジェクト+プロパティ、デバッグタブ、 "Visual Studioホスティングプロセスを有効にする"オプションからいくつかの副作用があります。どのプロセスyourapp.vshost.exe yourapp.exeの代わりになります。 SkeetはIDEを使用しないことでそれを回避しました。何も明白ではありませんが、それでも機能することができます。 –

答えて

3

私のために働きます。 、

Test.exe hello 

...、それは再帰的に余分なプロセスを開始しました:

コマンドライン使用
using System; 
using System.Diagnostics; 
using System.Reflection; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     Assembly ass = System.Reflection.Assembly.GetExecutingAssembly(); 
     string cmd = Environment.CommandLine; 

     Process again = new Process(); 
     again.StartInfo.FileName = ass.Location; 
     again.StartInfo.Arguments = args[0]; 
     Console.WriteLine("Running with: " + args[0]); 
     System.Threading.Thread.Sleep(1000); 
     again.Start(); 
     return; 
    } 
} 

csc Test.cs 

をそしてとしてそれを走った私はまさにこのコードをコンパイルそれぞれには「Running with:hello」と書かれています。

+0

確認済み:-)ビット(第1引数)を変更しましたが、同じロジックを維持しました。ここでは正常に実行されます。 –

+0

VS2008からデバッグし、デバッグ>開始オプション>コマンドライン引数の下にargsを設定すると、上記のように失敗しますが、cmd.exeから実行すると動作します。理由は興味があります。助けてくれてありがとう。 – etoisarobot

関連する問題