2010-09-06 162 views
7

我有一個具有GUI的C#應用​​程序,並將其輸出類型設置爲Windows應用程序。我也想從命令行(通過參數)調用它,因此它也需要是一個控制檯應用程序。有沒有辦法讓我的應用程序作爲Windows應用程序和控制檯應用程序運行?有沒有辦法在運行時設置它,還是編譯時設置?爲.NET程序提供輸出類型的Windows應用程序和控制檯應用程序

回答

8

您可以連接控制檯。使Program.cs中的代碼看起來像這樣:

[STAThread] 
    static void Main(string[] args) { 
     if (args.Length > 0) { 
      AttachConsole(-1); 
      Console.WriteLine(""); 
      Console.WriteLine("Running in console, press ENTER to continue"); 
      Console.ReadLine(); 
     } 
     else { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 
    } 
    [System.Runtime.InteropServices.DllImport("kernel32.dll")] 
    private static extern bool AttachConsole(int pid); 
+0

這類作品似乎有點古怪。我會接受,但我已經去了兩個獨立的應用程序,Windows和控制檯。 – DanDan 2010-09-07 15:34:25

+0

這個古怪的位可能是你在你沒有創建的控制檯上寫的。產量混合。你也可以使用AllocConsole(),但是它有自己的。 – 2010-09-07 15:56:28

1

Windows窗體應用程序可以接受命令行參數。在顯示應用程序主窗體之前,您只需在主函數中處理這種情況。

static void Main(string[] args) 
{ 
    if (args.Length > 0) 
    { 
     // Run it without Windows Forms GUI 
    } 
    else 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
    } 
} 
0

即使您的應用程序輸出類型設置爲Windows應用程序,仍然可以從命令行調用它並傳遞參數。

只需將您的Main方法定義更改爲:static void Main(string [] args){...} 並且您可以訪問'args'變量中傳遞的參數。

1

這是一個編譯時間設置:csc編譯器上有target:選項。 /target:winexe構建Windows應用程序(即使用GUI); /target:exe構建控制檯應用程序。不過,這兩種類型的應用程序都可以接受命令行參數。

+0

我已經結束了構建兩個 - 我想要一個真正的Windows程序和一個真正的控制檯應用程序。 – DanDan 2010-09-07 15:35:16

相關問題