C#输出到当前命令提示符?

时间:2016-01-22 07:18:00

标签: c# cmd

我正在使用Windows Form(C#应用程序),当我从cmd.exe运行此应用程序时,消息(错误日志,调试日志)将输出到消息框。

如何将此消息输出到我运行C#appliation的当前CMD.exe?

实施例: 我做了

C:>D:\Demo\CsOutputMsgToCMD\CsOutputMsgToCMD\bin\Release\CsOutputMsgToCMD.exe 1

输出:此消息必须以当前CMD输出

The argument is 1

更新#1 :我的C#应用​​程序是Windows窗体应用程序(非控制台) 但是当用户从cmd.exe运行此应用程序时我想要

  • 案例#1:没有任何争论:它正常启动应用程序(GUI)
  • 案例#2:有论据

    • 如果参数== 1,我会在没有启动GUI的情况下执行操作#1
    • 如果参数== 2,我会在没有启动GUI的情况下执行操作#2
    • 如果参数== n,我会在没有启动GUI的情况下执行#n

    =>如果未启动GUI应用程序,则输出必须位于当前cmd.exe(运行应用程序)

2 个答案:

答案 0 :(得分:2)

常见"技巧"根据您的更新1使工作正常工作是两个程序。让我们称他们为devenv.comdevenv.exe.com变体是控制台应用程序。 .exe变体是一个Windows窗体应用程序。

如果您只是从命令提示符运行devenv,控制台应用程序将运行(因为当面对两个具有相同名称但不同的程序时,命令提示符优先于.com而不是.exe扩展)。然后它可以检查它的参数,如果它决定调用GUI,它会启动devenv.exe然后退出。否则,它将继续正常运行控制台应用程序并保持连接到控制台。

如果它们具有许多常用功能,我建议将大部分功能放在可以共享的DLL程序集中。

答案 1 :(得分:1)

一种方法是将项目类型更改为Console Applicaton并使用 Environment.GetCommandLineArgs()来获取参数。所以,

第1步:转到项目属性 - >应用程序并将输出类型更改为控制台应用程序

第2步:将主要方法更改为以下内容:

static void Main()
{
    string[] args = Environment.GetCommandLineArgs();
    if (args.Length <= 1)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    else
    {
        switch (args[1])
        {
            case "1": Console.WriteLine("Doing #1 stuff"); break;
            case "2": Console.WriteLine("Doing #2 stuff"); break;
            case "n": Console.WriteLine("Doing #n stuff"); break;
        }
    }
}

第一个参数是应用程序的名称,其他参数将是您发送的实际参数。

您当然应该将业务逻辑提取到单独的DLL以避免代码重复。这样,如果从没有任何参数的控制台运行,它将启动Form1窗口,否则将检查参数值。

您还可以在表单中使用Console.WriteLine语句,该输出也将转到启动应用程序的命令提示符。

使用此方法的一个警告是,如果双击应用程序,则会打开控制台窗口以及窗体。如果它没有打扰你或者从命令提示符运行它是唯一的选择,那么它可能适合你。

希望这有点帮助。