【问题标题】:How to start a console application and prevent it from closing at the end?如何启动控制台应用程序并防止它在最后关闭?
【发布时间】:2012-01-12 13:54:29
【问题描述】:

我正在从我的 .NET 应用程序启动一个 shell 脚本 (.cmd)。我希望在脚本完成后控制台窗口保持打开状态,以便我可以检查任何错误。我正在尝试使用cmd.exe /K:my.cmd,但由于某种原因不起作用(脚本没有被执行)。即使是简单的“dir”命令也不起作用。还有其他想法吗?

为了演示,这个:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
{
    Arguments = "/K:dir",
    ErrorDialog = true,
    FileName = "cmd.exe",
    WorkingDirectory = @"C:\"
});

给我这个:

C:\>

添加说明:我的应用程序(启动脚本的应用程序)是一个 Windows 窗体 应用程序。执行上述代码会打开一个新的控制台窗口(应该如此)。我希望那个新的控制台窗口保持打开状态。另外,我无法修改脚本。这是一个自动构建脚本,它必须终止。

【问题讨论】:

    标签: .net console processstartinfo


    【解决方案1】:

    我不知道这是否是整个问题,但是如果您运行cmd /K:dir,则什么都不会运行。使用空格而不是冒号使其对我有用。

    cmd /K dir


    另外值得注意的是,您可以在运行对话框中测试这些命令。在任何最近的 Windows 版本中,这可以通过按住 Win 并按 R 来完成。

    【讨论】:

    • 这就是你在研究了另一个程序的命令行之后尝试使用一个程序的命令行时得到的结果(在我的例子中是 TortoiseSVN)。 :P
    【解决方案2】:

    从您的示例中删除冒号:

    System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
    {
      Arguments = "/K dir",
      ErrorDialog = true,
      FileName = "cmd.exe",
      WorkingDirectory = @"C:\"
    });
    

    【讨论】:

      【解决方案3】:

      您可以将命令放在批处理 (.bat) 文件中,然后将批处理文件中的最后一个命令设为“暂停”(不带引号)。然后,不执行 cmd,而是执行批处理文件。

      示例批处理文件 - test.bat

      目录 暂停

      您也可以将结果输出到一个文本文件,然后在您的应用程序中显示该文本文件。

      DIR >results.txt
      

      【讨论】:

      • 有道理,但有很多这样的脚本,我不想为每个脚本编写单独的 .BAT 文件。我可以即时生成一个临时的 .BAT 文件……但这似乎是一个 hacky 解决方法。没有更好的办法吗?
      • 您可以将结果输出到文件中,然后打开并显示该文件。 C:> DIR > dirResults.txt
      【解决方案4】:

      我会将错误记录到文件中,而不是让窗口保持打开状态。 保持 .net 控制台窗口打开添加

      Console.ReadLine();
      

      到最后,这将要求用户按 Enter 键继续。你也可以使用Console.ReadKey()来使用任意键

      如果你想保持进程窗口打开,命令是pause

      【讨论】:

        猜你喜欢
        • 2016-01-31
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        • 2023-03-30
        • 2015-05-09
        相关资源
        最近更新 更多