0

我创建了一个控制台应用程序。在此应用程序中,如果发生任何异常,我尝试使用 Process.Start() 方法重新启动 exe。问题是在执行这行特定的代码时,会打开和关闭一个命令提示符窗口。这个过程一次又一次地发生。这是我试图重新启动 exe 的代码。

static void Main(string[] args)
{
    try
    {
        throw new ArgumentNullException();
    }
    catch (Exception ee)
    {
        ProcessStartInfo Info = new ProcessStartInfo();
        Info.Arguments = "/C \"" + Application.StartupPath + "\\AppRestart.exe" + "\"";
        Info.WindowStyle = ProcessWindowStyle.Normal;
        Info.CreateNoWindow = false;
        Info.FileName = "cmd.exe";
        Process.Start(Info);
        Environment.Exit(0);
    }
}
4

4 回答 4

2

发生这种情况是因为您实际上正在启动cmd.exe(Windows 命令行处理器),它是一个控制台应用程序。

尝试

ProcessStartInfo Info = new ProcessStartInfo();
Info.FileName = Path.Combine(Application.StartupPath,"AppRestart.exe");
Info.WindowStyle = ProcessWindowStyle.Normal;
Info.CreateNoWindow = false;
Process.Start(Info);

反而

于 2013-05-30T13:20:39.930 回答
1

我认为您不需要命令窗口来运行控制台应用程序。

ProcessStartInfo Info = new ProcessStartInfo();
Info.WindowStyle = ProcessWindowStyle.Normal;
Info.CreateNoWindow = false;
Info.FileName = "\"" + Application.StartupPath + "\\AppRestart.exe" + "\"";
Process.Start(Info);
Environment.Exit(0);

实际上,如果您想在命令窗口中运行某些内容,您需要添加 /C 或 /K 标志,否则 cmd.exe 会运行但不会执行任何内容。
在这种情况下,如果你真的需要隐藏命令窗口,你可以设置

 Info.CreateNoWindow = true;
 Info.UseShellExecute = false;

但是,不必在命令窗口中运行控制台应用程序。它将创建自己的控制台来运行。

附带说明,如果 AppRestart 的代码是上面显示的代码,则进入无限循环。在第一次启动时,它会无条件地抛出一个异常,捕获在 catch 子句中,该子句在主代码中以相同的无条件抛出来重新启动同一个应用程序

static void Main(string[] args)
{
    if(conditionNotToThrow == false)
    {
        try
        {
            throw new ArgumentNullException();
        }
        catch(Exception ex)
        {

        }
     }
     else
     {
         // the code to resolve the problem for which this application has been made
     }
}
于 2013-05-30T13:18:29.520 回答
1

试试这样:

static void Main(string[] args)
{
    try
    {
        throw new ArgumentNullException();
    }
    catch (Exception ee)
    {
        ProcessStartInfo Info = new ProcessStartInfo();
        Info.Arguments = "/C \"" + Application.StartupPath + "\\AppRestart.exe" + "\"";
        //Info.WindowStyle = ProcessWindowStyle.Normal;
        //Info.CreateNoWindow = false;

        // set window hidden
        Info.WindowStyle = ProcessWindowStyle.Hidden;
        Info.CreateNoWindow = true;
        // set window hidden

        Info.FileName = "cmd.exe";
        Process.Start(Info);
        Environment.Exit(0);
    }
}
于 2013-05-30T13:19:05.720 回答
0

尝试不使用 cmd.exe 直接重新启动您的 exe

于 2013-05-30T13:18:49.823 回答