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

本文关键字:控制台 应用程序 执行 参数 设置 | 更新日期: 2023-09-27 18:09:01

几天前,我使用v#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附带了一个特殊的GUI版本,称为Pythonw.exe。这与标准的Python.exe几乎相同,除了它不是一个控制台程序,所以不会遇到前面描述的问题。

您可以在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
       }
    }
}

您可以链接到kernel32.dll并使用AttachConsole函数。下面是一个例子:http://www.csharp411.com/console-output-from-winforms-application/