2009-06-01 28 views
22

Tengo una aplicación de consola que estoy usando para ejecutar trabajos programados a través del programador de Windows. Toda la comunicación a/desde la aplicación está en el correo electrónico, registro de eventos, registros de la base de datos. ¿Hay alguna forma en que pueda suprimir la ventana de la consola?. Aplicación de consola .Net que no muestra una consola

Respuesta

44

Sure. Constrúyalo como una aplicación de winforms y nunca muestre su formulario.

Solo tenga cuidado, porque entonces ya no es una aplicación de consola, y hay algunos entornos donde no podrá usarla.

+0

¿De qué forma puedo hacerlo dentro del proyecto existente para no tener que migrar cosas? – Jeff

+16

Haga clic con el botón derecho en el proyecto, vaya a Propiedades y, en el formulario que aparece, cámbielo de una aplicación de consola a una aplicación de WinForms, ciérrela y vuelva a compilar. –

+0

Gracias Chris, ¡funcionó muy bien! – Jeff

1

¿Por qué no haces que la aplicación sea un servicio de Windows?

+4

¡Trabajos no programados! = Servicio de Windows. A menos que esté usando el correo electrónico para iniciar el procesamiento, en cuyo caso un servicio es una mejor opción. –

+2

Sí, he pasado por ese camino antes. Utilizo para crear trabajos programados usando la infraestructura del servicio, pero finalmente me di cuenta de que hacerlo de esa manera resulta en un código innecesario y actualizaciones difíciles. En resumen, ¡recrea una infraestructura que el planificador de tareas ha proporcionado de forma gratuita! – Jeff

+1

Eso está bien, pero no veo razones para rechazar la pregunta de Badaro. –

9

Tomado de MSDN (link text):

using System.Runtime.InteropServices; 

... 
     [DllImport("user32.dll")] 
     public static extern IntPtr FindWindow(string lpClassName,string lpWindowName); 

     [DllImport("user32.dll")] 
     static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

... 

     //Sometimes System.Windows.Forms.Application.ExecutablePath works for the caption depending on the system you are running under. 
     IntPtr hWnd = FindWindow(null, "Your console windows caption"); //put your console window caption here 
     if(hWnd != IntPtr.Zero) 
     { 
      //Hide the window 
      ShowWindow(hWnd, 0); // 0 = SW_HIDE 
     } 


     if(hWnd != IntPtr.Zero) 
     { 
      //Show window again 
      ShowWindow(hWnd, 1); //1 = SW_SHOWNORMA 
     } 
2

programar la tarea para ejecutar como un usuario diferente de su cuenta y no aparecerá una ventana emergente. . .

2

Simplemente configure la tarea programada como "Ejecutar si el usuario ha iniciado sesión o no".

Cuestiones relacionadas