-1

プログラムがまだ同じコンソールで動作している場合、新しいコンソールを作成せずに、Java のように C# コンソール アプリケーションを再起動するにはどうすればよいですか。

新しいアプリケーションを起動してProcess.UseShellExecute = false、新しく作成したプロセスから現在のプロセスを強制終了しようとしましたが、これを使用して子から親プロセスを強制終了できます。新しいプロセスを作成した後、現在のプロセスを強制終了しようとしましたが、機能しません。

4

1 に答える 1

0

これを行う簡単な方法はありませんが、この動作をシミュレートできます。

  1. アプリケーションをコンソール アプリケーションから Windows アプリケーションに変更します。
  2. アプリケーションの最初のインスタンス用のコンソールを作成する
  3. アプリケーションの新しいインスタンスを開始し、手順 2 で作成したコンソールに接続します。
  4. 最初のインスタンスを終了します。

アプリケーションの種類を 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();
    }
}
于 2012-07-02T21:06:11.733 に答える