重启控制台应用程序

时间:2012-07-02 20:17:31

标签: c# console-application reboot

当程序仍然在同一个控制台中工作时,如何在Java中重新启动我的C#控制台应用程序,而无需创建新的。

我尝试使用Process.UseShellExecute = false启动新应用程序并从新创建的程序中删除当前进程,但我可以使用此方法从子进程中删除父进程。我试图在创建new之后杀死当前进程,但它也不起作用。

1 个答案:

答案 0 :(得分:0)

没有直接的方法可以做到这一点,但是你可以模拟这种行为:

  1. 将应用程序从控制台应用程序更改为Windows应用程序。
  2. 为应用程序的第一个实例创建控制台
  3. 启动应用程序的新实例并附加到步骤2中创建的控制台。
  4. 退出第一个实例。
  5. 重要的是不要忘记将应用程序类型更改为Windows应用程序。

    以下代码将重新启动应用程序,直到您按Ctrl + C:

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Reflection;
    
    class Program
    {
        [DllImport("kernel32", SetLastError = true)]
        static extern bool AllocConsole();
    
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool AttachConsole(uint dwProcessId);
    
        const uint ATTACH_PARENT_PROCESS = 0x0ffffffff;
    
    
        [STAThread]
        static void Main(string[] args)
        {
            if (!AttachConsole(ATTACH_PARENT_PROCESS))
            {
                AllocConsole(); 
            }
            Console.WriteLine("This is process {0}, press a key to restart within the same console...", Process.GetCurrentProcess().Id);
            Console.ReadKey(true);
    
            // reboot application
            var process = Process.Start(Assembly.GetExecutingAssembly().Location);
    
            // wait till the new instance is ready, then exit
            process.WaitForInputIdle();
        }
    }