【问题标题】:Stop windows command prompt from "returning" after an executable is started?启动可执行文件后停止Windows命令提示符“返回”?
【发布时间】:2015-10-07 18:22:01
【问题描述】:

我正在开发一个应用程序,如果它们对用户没有用,则将一些异常消息写入Console。因此,如果有人通过简单地双击来运行可执行文件,他们将永远不会看到这些消息。

在 Visual Studio 中,这些消息显示在输出窗口中,但在我的情况下,我在没有安装 Visual Studio 的机器上测试我的应用程序,但我仍然想查看是否出现任何这些消息。

过去,我只是从命令提示符运行可执行文件,它充当 Visual Studio 中的输出窗口。虽然出于某种原因,我的应用程序在从命令提示符运行时,只是简单地“返回”并且不显示任何消息。

例如我可能会这样启动它,它会立即返回

D:\>MyApp.exe

D:\>

我不确定当我运行它时是否应该使用特定的开关(我尝试过/K 无济于事),或者我的应用程序是否有某些东西导致它返回。

关于如何通过命令行运行它以便查看消息的任何想法?

参考这里是我的应用程序Program.cs

static class Program
{
    static Mutex mutex = new Mutex(true, "{12345678-1234-1234-1234-123456789012}");

    [STAThread]
    static void Main()
    {
        if (mutex.WaitOne(TimeSpan.Zero, true))
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            SplashScreen.ShowSplashScreen();
            Application.Run(MainForm.Instance);

            mutex.ReleaseMutex();
        }
        else
            NativeMethods.PostMessage((IntPtr)NativeMethods.HWND_BROADCAST, NativeMethods.WM_JTTMAINWINDOW, IntPtr.Zero, IntPtr.Zero);
    }
}

【问题讨论】:

  • 您能否看看以下内容是否有帮助stackoverflow.com/questions/14616837/… 这将允许您将其写入文件。
  • 您是否考虑过使用允许定义控制台侦听器的日志库,例如 log4net?您还可以使用 p/invoke 将控制台窗口附加到您的应用程序。您正在使用Console.WriteXXXDebug.WriteXXX 通话吗?您使用互斥锁创建单实例应用程序的方式还有一个小问题,您需要捕获未处理的异常并在那里释放。
  • 此程序不会向控制台写入任何内容。我会在if-statement 之前添加一个Console.WriteLine("something"); 用于测试目的。
  • 您的程序正在构建为 Windows 应用程序(/SUBSYSTEM:Windows 链接器选项)。如果您希望它输出到控制台,则必须将其构建为控制台应用程序(/SUBSYSTEM:Console 选项)。但是,这意味着如果您双击应用程序,控制台将自动打开,这可能是不可取的。同一个可执行文件无法同时执行这两项操作。通常的解决方案是有两个可执行文件,一个 GUI 版本和一个控制台版本。
  • (实际上,Windows 应用程序可能附加到父控制台并写入它,但由于控制台不会等待应用程序,这通常是不是一个好主意 - 输出将与 cmd.exe 的输出和/或在同一控制台中运行的任何其他程序混合。)

标签: c# command-line windows-7


【解决方案1】:

要让您的程序输出到控制台,请将其构建为控制台应用程序。

在 Visual Studio 中,相关的链接器选项是 /SUBSYSTEM:Console ;或者,在创建新项目时,选择“控制台应用程序”模板,该模板将自动设置链接器选项。

这也意味着如果您从命令提示符运行程序,命令提示符将等待程序退出。此外,如果您双击该程序而不是从命令提示符运行它,则会自动创建一个控制台窗口。

(无法让命令提示符等待程序,但如果双击则阻止程序创建控制台窗口。有关详细信息,请参阅this question and its answers。)

【讨论】:

  • 谢谢你,Harry,我会调查链接的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多