【问题标题】:Start a C# windows application and wait for exiting in command line启动 C# windows 应用程序并等待在命令行中退出
【发布时间】:2014-03-13 10:13:09
【问题描述】:

通常,在命令提示符下调用 Windows 应用程序不会等待其退出。一旦我输入myFormApp.exe 并按回车,将显示一个表单,命令提示符立即移至下一行。

C:\> myFormApp.exe
C:\>     # this line will display immediately

我知道使用cmd /c 将等待应用程序退出。

C:\> cmd /c myFormApp.exe
C:\>     # this line will display after myFormApp.exe closed

但即使没有cmd /c,我也想等待。

有没有办法通过编辑 myFormApp.exe 源代码来防止命令提示符移动到新行?

AllocConsole添加到windows应用程序会显示控制台,但不会让命令提示符等待退出。

if (args.Length > 0)
{
    // Command line given, display console
    AllocConsole();
}
else
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

任何建议将不胜感激。谢谢!

【问题讨论】:

    标签: c# windows console-application windows-applications


    【解决方案1】:

    无需编写额外的应用程序。 Windows 中已经存在这样的一个 - start/wait 选项。它不仅会等待您的应用程序完成执行,还会设置返回的错误级别(也称为 ExitCode)。

    【讨论】:

      【解决方案2】:

      您可以编写一个简单的控制台应用程序来包装您的 winforms 应用程序。您可以在控制台应用程序中启动一个进程:

      static void Main(string[] args)
      {
          Console.WriteLine("Hello!");
      
          var process = new Process() { StartInfo = new ProcessStartInfo { FileName = @"WindowsFormsApplication1.exe" } };
          process.Start();
          process.WaitForExit();
      
          Console.WriteLine("bye bye!");
      }
      

      或者,您可以添加对 winforms 应用程序的引用并在控制台应用程序中实例化 winforms 类:

      static void Main(string[] args)
      {
          Console.WriteLine("Hello!");
      
          var mainForm = new WindowsFormsApplication1.Form1();
          mainForm.ShowDialog();
      
          Console.WriteLine("bye bye!");
      }
      

      【讨论】:

      • 双击执行包装控制台应用程序时,将显示命令提示符。这不是理想的行为。有什么办法可以避免吗?
      • 不,不是。您可以将包装应用程序的输出类型更改为 Windows 应用程序,这将使窗口不出现,但是如果您从控制台启动它,它不会等待执行完成。不太确定你想在这里实现什么,可能是为了解决错误的问题。阻止提示移动到新行并不能解决任何问题。用户可以随时打开新提示并执行任何操作。
      • 您可以使用互操作来隐藏和显示控制台窗口。启动时隐藏,退出时显示。这样,如果您在 Windows 中双击您的应用程序,则不会显示任何控制台,如果您从现有控制台启动它,它将在 winforms 应用程序执行期间隐藏,但在您退出时再次显示。 stackoverflow.com/questions/3571627/… 我不建议这样做。
      • 我想要做的是等待从命令行调用的 Windows 应用程序的执行。现在双击 exe 时应用程序将显示控制台。
      • 无法构建这样的应用程序:(a) 从命令提示符启动时命令提示符等待,(b) 从资源管理器启动时不创建新的控制台窗口。它们是互斥的,因为它们都基于完全相同的东西:可执行文件是标记为控制台应用程序还是 GUI 应用程序。唯一的解决方案是拥有两个不同的可执行文件,当然实际代码可以通过 DLL 共享,或者一个可执行文件可以启动另一个。
      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多