2010-09-06 1 views
7

Ho un'applicazione C# che ha un'interfaccia grafica e ha il suo tipo di uscita impostata come applicazione Windows. Vorrei anche invocarlo dalla riga di comando (tramite parametri) e quindi deve anche essere un'applicazione di console. C'è un modo per far funzionare la mia applicazione sia come applicazione Windows sia come applicazione console? C'è un modo per impostare questo in fase di esecuzione o è un'impostazione di tempo di compilazione?Dare programma .NET un tipo di output di un'applicazione Windows e l'applicazione di console

risposta

8

È possibile collegare la console. Rendere il codice in Program.cs assomiglia a questo:

[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

Questo tipo di opere, ma sembra un po 'eccentrico. Accetterò ma sono andato per due applicazioni separate, Windows e Console. – DanDan

+0

Il bit eccentrico è probabilmente scritto in una console che non hai creato. L'output si mescola. Puoi anche usare AllocConsole() ma poi diventa suo. –

1

Un'applicazione Windows Form può accettare gli argomenti della riga di comando. Hai solo bisogno di gestire questo caso nella tua funzione principale prima di mostrare il modulo principale dell'applicazione.

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

Anche il tipo di output delle applicazioni è impostato come applicazione Windows, è ancora possibile richiamare dalla riga di comando e passare gli argomenti.

Basta modificare la definizione del metodo principale in: static void Main (string [] args) {...} e si ha accesso agli argomenti passati nella variabile 'args'.

1

È un'impostazione in fase di compilazione: c'è un'opzione target: nel compilatore csc. /target:winexe crea un'applicazione Windows (ad es. Con una GUI); /target:exe crea un'applicazione console. Entrambi i tipi di applicazione possono accettare gli argomenti della riga di comando, comunque.

+0

Ho finito per costruire entrambi - Volevo un vero programma di Windows e una vera applicazione di console. – DanDan