プログラムがまだ同じコンソールで動作している場合、新しいコンソールを作成せずに、Java のように C# コンソール アプリケーションを再起動するにはどうすればよいですか。
新しいアプリケーションを起動してProcess.UseShellExecute = false
、新しく作成したプロセスから現在のプロセスを強制終了しようとしましたが、これを使用して子から親プロセスを強制終了できます。新しいプロセスを作成した後、現在のプロセスを強制終了しようとしましたが、機能しません。
プログラムがまだ同じコンソールで動作している場合、新しいコンソールを作成せずに、Java のように C# コンソール アプリケーションを再起動するにはどうすればよいですか。
新しいアプリケーションを起動してProcess.UseShellExecute = false
、新しく作成したプロセスから現在のプロセスを強制終了しようとしましたが、これを使用して子から親プロセスを強制終了できます。新しいプロセスを作成した後、現在のプロセスを強制終了しようとしましたが、機能しません。
これを行う簡単な方法はありませんが、この動作をシミュレートできます。
アプリケーションの種類を 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();
}
}