【问题标题】:Close console window after execution执行后关闭控制台窗口
【发布时间】:2018-08-02 04:40:32
【问题描述】:

我正在使用以下代码从 c# 代码打开控制台程序

ProcessStartInfo startInfo = new ProcessStartInfo(@"exepath");
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.Arguments = string.Format("b{0} {1} {2}", i, var1, var2);
Process.Start(startInfo);

这会导致打开一个新的控制台窗口并从控制台执行代码。但我注意到,一旦执行完成,这个控制台窗口就不会关闭。打开的控制台程序的Program.cs只有这样

    static void Main(string[] args)
    {
        Console.write("Executing....");          
        if (args == null || args.Length==0)
        {
            Console.write("No parameters....");
        }
        else
        {
            string batch = args[0];
            int offset = Convert.ToInt16(args[1]);
            int limit = Convert.ToInt16(args[2]);
            Console.write("Found few parameters....");                 
            ExecuteAFunction(offset, limit);

        }
         Console.write("End");
    }

这里没有写Console.ReadLine或等待输入代码。那么如何确保代码Process.Start打开的窗口在执行完成后关闭

【问题讨论】:

  • 你总是可以在你的代码中使用Environment.Exit(0)....
  • ExecuteAFunction 还在执行吗?
  • @MickyD ExecuteAFunction 完成了执行,我可以在控制台中看到日志“End”。
  • 还有什么你没有展示的吗?假设您的 Main 已完成,该窗口应自行关闭
  • @MickyD 是的,这也是我的想法。我现在必须深入检查。

标签: c# process


【解决方案1】:

您需要等待如下过程完成

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CMD.EXE";
//command may be on command window 
p.Start(psi);
p.WaitForExit(); //wait for exit

或者应该关闭

Process myProcess = Process.Start(psi); 
//close it 
myProcess.CloseMainWindow(); 
myProcess.Close(); 

//or kill process 
myProcess.Kill();

【讨论】:

  • 不需要从 即发即弃 进程显式关闭控制台窗口
  • @MickyD - 我不确定我的问题是否正确,但在有问题的这一行上回答“这里没有 Console.ReadLine 或等待输入代码。那么我怎样才能确保窗口代码打开的Process.Start会在执行完成后关闭"
  • 按照 one 的建议使用 Environment.Exit(0) 的任何负面影响
  • @JibinMathew - 这将关闭您当前的应用程序,即 .net 应用程序,但我怀疑它会关闭您的命令进程窗口
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
相关资源
最近更新 更多