C# 设置参数时作为控制台应用程序执行

C# 设置参数时作为控制台应用程序执行,c#,winforms,C#,Winforms,几天前,我使用VC 2010 Express在C中开发了一个WinForms应用程序。创建并保存项目后,我在项目设置中将其设置为控制台应用程序,因此除了开始表单之外,还会弹出一个windows命令行。我使用控制台输出调试信息(只需使用console.Write()函数) 现在,我的应用已经准备好发布了。当然,我不希望用户看到控制台,但我想集成一种向感兴趣的人展示控制台的方法。所以,我认为最好的方法是一个参数(比如-console),但我不知道只有在设置了参数的情况下如何启动作为控制台应用程序的程

几天前,我使用VC 2010 Express在C中开发了一个WinForms应用程序。创建并保存项目后,我在项目设置中将其设置为控制台应用程序,因此除了开始表单之外,还会弹出一个windows命令行。我使用控制台输出调试信息(只需使用console.Write()函数)

现在,我的应用已经准备好发布了。当然,我不希望用户看到控制台,但我想集成一种向感兴趣的人展示控制台的方法。所以,我认为最好的方法是一个参数(比如-console),但我不知道只有在设置了参数的情况下如何启动作为控制台应用程序的程序。我当然知道如何处理args[]数组,但我不知道在有arg时如何显示控制台。我已经尝试过通过命令行(CMD->prog.exe)简单地启动程序,但是没有成功。程序启动,但控制台会像往常一样直接显示启动程序后的当前路径


我的意图是否有可能?

好吧,没有办法让一个二进制文件同时支持控制台和非控制台行为,只能在启动时进行选择。我看到的所有解决方法都使用两个二进制文件

有一个关于Python如何处理这个问题的讨论(我的黑体字):

Python附带的标准Python.exe称为控制台应用程序(这意味着它是为与Windows控制台交互而构建的,或者称为DOS框或命令提示符)。尽管您可以使用Python.exe执行Tkinter程序,您的程序将始终与Windows控制台关联。它工作正常,但有以下副作用:

  • 如果从Windows资源管理器执行Python.exe,将创建一个新的空控制台窗口;然后创建Tkinter窗口
  • 如果从命令提示符下执行Python.exe下的Tkinter应用程序,则在Tkinter应用程序完成之前,命令提示符不会返回。这对于许多用户来说是一个惊喜,他们希望执行GUI程序会立即返回命令提示符
为了解决这个问题,Python附带了一个名为Pythonw.exe的特殊GUI版本。这与标准Python.exe几乎相同,只是它不是一个控制台程序,因此不会遇到前面描述的问题


您可以链接到kernel32.dll并使用函数
AttachConsole

下面是一个示例:

您可以在forms load事件中获取Winform的命令行参数,然后如果该参数用于控制台,请打开控制台

private void Form1_Load(object sender, EventArgs e)
{
    string[] args = Environment.GetCommandLineArgs();
    foreach(string arg in args)
    {
       if(arg == "consoleargument")
       {
           // Run console
       }
    }
}

我想说你最好记录到一个日志文件,这是一个可行的方法吗?使用例如
System.Diagnostics.Debug.WriteLine
而不是Console.WriteLine,您可以轻松地将该输出配置为以日志文件结束,或者使用大约30行代码,连接您自己的跟踪侦听器,并在winforms窗口(可以用热键隐藏/显示)中输出信息Pinvoke Alloconsole()当您看到命令行参数时。