2011-08-02 57 views
1

我想有一个控制台应用程序在arg中传递,以便能够调用它本身传递在最初发送的相同命令arg中。如何用参数递归调用控制台应用程序?

如果我尝试这个但是

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; 
} 

初始调用打印“与运行:ARGUMENT1”,但因为args数组是空的第二个呼叫失败。

+3

也许'Assembly'不喜欢被称为屁股,因此拒绝标识自己。 :) –

+1

Project + Properties,Debug选项卡,“启用Visual Studio托管过程”选项有一些可能的副作用。这使得您的进程yourapp.vshost.exe而不是yourapp.exe。 Skeet通过不使用IDE避开了它。尽管如此,这仍然可以工作。 –

回答

3

适合我。我编译正是验证码:使用

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 

然后运行它为:

Test.exe hello 

...它开始递归过程外,每一个打印“运行:你好”。

+0

确认:-)。修改了一点(第一个参数),但保持相同的逻辑。在这里运行。 –

+0

如果我从VS2008中进行调试,并在调试>开始选项>命令行参数下设置参数,它将失败,如上所述,但是如果我从cmd.exe运行它,它将起作用。好奇为什么。谢谢您的帮助。 – etoisarobot

相关问题