2016-01-22 90 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控制檯應用程序 –

相關問題