Как перезапустить консольное приложение?
Мне нужно перезапустить консоль приложения, когда пользователь нажимает "R".
У меня есть это
Console.WriteLine(message, "Rebuild Log Files" 
    + " Press Enter to finish, or R to restar the program...");
string restar = Console.ReadLine();
if(restar.ToUpper() == "R")
{
   //here the code to restart the console...
}
спасибо
8 ответов
Я не думаю, что вам действительно нужно перезапустить приложение. Просто запустите требуемый метод(Ы) после нажатия R. нет необходимости перезапускать.
// Starts a new instance of the program itself
System.Diagnostics.Process.Start(Application.ExecutablePath);
// Closes the current process
Environment.Exit(0);
static void Main(string[] args)
{
    var info = Console.ReadKey();
    if (info.Key == ConsoleKey.R)
    {
        var fileName = Assembly.GetExecutingAssembly().Location;
        System.Diagnostics.Process.Start(fileName);
    }
}
еще один простой способ
//Start process, friendly name is something like MyApp.exe (from current bin directory)
System.Diagnostics.Process.Start(System.AppDomain.CurrentDomain.FriendlyName);
//Close the current process
Environment.Exit(0);
запустить второй exe, который завершает консольную программу, запускает новый экземпляр и завершает себя?
быть явным, как это в коде?
Это пространство имен должно иметь все, что вам нужно, если это решение, которое вы хотите преследовать.
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
все слишком много думают об этом. Попробуйте что-то вроде этого:
class Program : IDisposable
{
    class RestartException : Exception
    {
        public RestartException() : base()
        {
        }
        public RestartException( string message ) : base(message)
        {
        }
        public RestartException( string message , Exception innerException) : base( message , innerException )
        {
        }
        protected RestartException( SerializationInfo info , StreamingContext context ) : base( info , context )
        {
        }
    }
    static int Main( string[] argv )
    {
        int  rc                      ;
        bool restartExceptionThrown ;
        do
        {
            restartExceptionThrown = false ;
            try
            {
                using ( Program appInstance = new Program( argv ) )
                {
                    rc = appInstance.Execute() ;
                }
            }
            catch ( RestartException )
            {
                restartExceptionThrown = true ;
            }
        } while ( restartExceptionThrown ) ;
        return rc ;
    }
    public Program( string[] argv )
    {
        // initialization logic here
    }
    public int Execute()
    {
        // core of your program here
        DoSomething() ;
        if ( restartNeeded )
        {
            throw new RestartException() ;
        }
        DoSomethingMore() ;
        return applicationStatus ;
    }
    public void Dispose()
    {
        // dispose of any resources used by this instance
    }
}
попробуйте так:
// start new process
System.Diagnostics.Process.Start(
     Environment.GetCommandLineArgs()[0], 
     Environment.GetCommandLineArgs()[1]);
// close current process
Environment.Exit(0);
//here the code to restart the console...
System.Diagnostics.Process.Start(Environment.GetCommandLineArgs()[0], Environment.GetCommandLineArgs().Length > 1 ? string.Join(" ", Environment.GetCommandLineArgs().Skip(1)) : null);
