调用Process.Start()方法时,命令提示符窗口无法在.NET中关闭

时间:2013-05-30 13:13:33

标签: .net

我创建了一个控制台应用程序。在此应用程序中,如果发生任何异常,我尝试使用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 个答案:

答案 0 :(得分: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);

代替

答案 1 :(得分: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
     }
}

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

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