在Enviroment.Exit 之后启动进程

问题描述

我的问题:我想加一个重启功能,这个没问题,但是我需要关闭程序后再启动,因为程序只能有一个实例。在创建 Enviroment.Exit 后,如何以某种方式启动进程(本身)?

解决方法

取决于您的需要,如果这是 Windows 窗体应用程序。这可能对您有所帮助:

Application.Restart Method

它一直存在,他们把它放回 .net Core 3.0

  • .NET 5.0
  • .NET Core 3.0、3.1
  • .NET 框架 2.0、3.0、3.5、4.0、4.5、4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、4.7.2、4.8

关闭应用程序并立即启动一个新实例。

备注

调用 Restart 最常见的原因是启动一个新版本 您已使用 ClickOnce 下载的应用程序 Update 或 UpdateAsync 方法。

应用程序在它们最初所在的上下文中重新启动 跑步。如果您的应用程序是使用直接指向的 URL 启动的 应用程序的主要可执行文件,它将使用 相同的网址。如果您的应用程序是 ClickOnce 应用程序,它将是 使用 ClickOnce 重新启动。

如果您的应用程序最初提供命令行选项,当 它首先执行,重新启动将再次启动应用程序 相同的选项。

,

你不应该做Environment.Exit,想想其他正在运行的线程? 您可以使用以下代码重新启动。

static void RestartProcess(int processId,string processName )
{
    Process process = null;
    try
    {
        process = Process.GetProcessById(processId);
        Application.Exit();
        //Or you can use process.WaitForExit(1000);
    }
    catch (ArgumentException ex)
    {
    
    }
    Process.Start(processName);
}
,

解决方案是,感谢 ckuri (https://stackoverflow.com/users/7565574/ckuri) :

“你显然有一些代码来检查一个实例是否已经在运行,如果一个实例正在运行,当前应用程序的启动被中止。重启问题的一种解决方案是用一个声明跳过的参数启动新进程实例检查。”