【发布时间】: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.WriteXXX或Debug.WriteXXX通话吗?您使用互斥锁创建单实例应用程序的方式还有一个小问题,您需要捕获未处理的异常并在那里释放。 -
此程序不会向控制台写入任何内容。我会在
if-statement 之前添加一个Console.WriteLine("something");用于测试目的。 -
您的程序正在构建为 Windows 应用程序(
/SUBSYSTEM:Windows链接器选项)。如果您希望它输出到控制台,则必须将其构建为控制台应用程序(/SUBSYSTEM:Console选项)。但是,这意味着如果您双击应用程序,控制台将自动打开,这可能是不可取的。同一个可执行文件无法同时执行这两项操作。通常的解决方案是有两个可执行文件,一个 GUI 版本和一个控制台版本。 -
(实际上,Windows 应用程序可能附加到父控制台并写入它,但由于控制台不会等待应用程序,这通常是不是一个好主意 - 输出将与
cmd.exe的输出和/或在同一控制台中运行的任何其他程序混合。)
标签: c# command-line windows-7