2016-01-22 78 views
0

我正在使用Windows窗体(C#应用程序),并且当我从cmd.exe运行此应用程序时,消息(错误日志,调试日志)被输出到消息框。C#输出到当前的命令提示符?

我应该怎么做才能将此消息输出到当前运行C#应用程序的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,我做动作#1没有启动GUI
    • 如果参数== 2,I做动作#2不发射GUI
    • 如果参数== N,I做动作#n中不发射GUI

    =>当不启动GUI应用程序,输出必须在当前租金的cmd.exe(跑应用程序)

+3

在这种情况下使用控制台应用程序模板。 – Rahul

+1

除了这个事实,作为一个Windows应用程序,您不必从控制台窗口中启动(因此可能不存在),您还会注意到启动的控制台已准备就绪并能够启动新命令 - 因此它可能正在为其他程序执行完全不相关的输出。 –

+0

您可以使用Debug侦听器来实现该功能,并将其添加到“Debug.Listeners”集合中。还需要定义DEBUG和/或TRACE构建标志。 –

回答

2

常见的“帽子戏法”,以使事情的工作,按您的更新1是有程序。我们称他们为devenv.comdevenv.exe.com变体是一个控制台应用程序。 .exe变体是一个Windows窗体应用程序。

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

如果他们会有很多共同的功能,我建议将它的大部分放在一个DLL程序集中,它们都可以共享。

1

一种方法可能是将项目类型更改为控制台应用程序,并使用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语句,并且输出也将转到启动应用程序的命令提示符。

使用这种方法的一个警告是,如果您双击应用程序将打开一个控制台窗口以及Windows窗体。如果它不打扰你或者从命令提示符运行它是唯一的选择,那么它可能适用于你。

希望这会有所帮助。

+0

从cmd.exe运行应用程序时,此方法正常工作。但是当我通过双击运行它时,它会同时启动GUI和控制台。 – GSP

+0

@GSP:是的,这就是我在答案中提到的原因。你可以使用互操作来隐藏那个窗口(虽然我自己没有尝试过),这看起来像有一个工作的答案:http://stackoverflow.com/questions/3571627/show-hide-the-console-window-of-ac -sharp控制台应用程序 –