2010-04-21 50 views
41

Tengo una aplicación de consola escrita en C# que está programada para ejecutarse cada 15 minutos aproximadamente utilizando el Programador de tareas de Windows incorporado.Cómo ejecutar una aplicación de consola .NET en segundo plano

Cada vez que se ejecuta, la consola negra aparece durante la ejecución y luego se cierra. No estoy escribiendo nada en la consola. ¿Hay alguna manera de hacer que esto se ejecute en segundo plano?

+0

No desde la aplicación de la consola en sí, creo que debería preguntarle al Superusuario cómo configurar esto en el Programador. –

Respuesta

46

fácil!

Parece difícil de creer, pero funciona como un encanto. Lo he usado para algunos proyectos de configuración, cuando desea realizar tareas personalizadas sin signos de ello.

  • Cree el proyecto como un proyecto de aplicación de Windows (esta es la parte difícil).
  • Nunca haga llamadas de ninguna forma. Simplemente seguir exactamente como en su aplicación de consola

    class Program 
    { 
        static void Main(string[] args) 
        { 
         // Just don't call Application.Run(new frmMain(args)); 
    
         // ... your code 
        } 
    } 
    

Esto se debe a que los proyectos de aplicaciones de Windows no son muy diferentes a la consola, excepto por la primera forma y referencias. Es una ejecución totalmente oculta. ¡Intentalo!

+0

No puedo hacer que el código se vea como un código - sry –

9

¿Qué ocurre al implementar la aplicación en un servicio de Windows? Puede establecer el intervalo en 15 minutos y ejecutar la operación en timer_tick.

1

sucio como cualquier cosa por ahí, pero (from here):

El proceso tarda de 3 archivos. launch.bat, invis.vbs, y (su programa ). En launch.bat (este archivo ejecuta su programa en silencio), ponga wscript.exe "C:\yourpath\invis.vbs" "your file.bat". En invis.vbs, puesto en

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

Y finalmente en su archivo, launch.bat, poner lo que quiera ...

echo off erase c:\junk.txt. Bueno, estás hecho. Simplemente abra launch.bat.

Aunque funciona como un encanto. Lanza el primer bate (launch.bat), que a su vez lanza su servicio/ejecutable en sigilo. Por lo tanto, es un blip rápido para el lanzamiento original, luego se ha ido.

9

Puede usar la API de Windows para minimizar la consola. De lo contrario, puede convertirlo en un archivo EXE de Windows que en realidad no carga un formulario y llama al System.Windows.Forms.Application.Run().

Código para minimizar la consola:

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

public const int SW_SHOWMINIMIZED = 2; 

IntPtr winHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; 
ShowWindow(winHandle, SW_SHOWMINIMIZED); 
+1

¡Me estaba preparando para publicar esto! Para ocultar la ventana: public const int SW_HIDE = 0; Para restaurar: public const int SW_RESTORE = 9; – JohnForDummies

2

Sólo se mostrará si está programado para ejecutarse como el mismo usuario que está actualmente en el sistema. Crear otro usuario de la máquina con un ridículamente contraseña larga, configurarlo para ser un administrador (sólo si es necesario) y programar la tarea para ejecutar como ese usuario.

0

Esto es fácil. Establezca la tarea para que se ejecute en una cuenta que no sea su cuenta de inicio de sesión.

133

Proyecto> Propiedades> pestaña Aplicación> cambie el tipo de salida a "aplicación de Windows".

No hay más ventana de consola.

+6

Me encontré con el mismo problema, y ​​esta respuesta me ayudó mucho más que la aceptada. – user17753

+0

de acuerdo - esta es una gran respuesta - realmente simple y funciona perfectamente –

+2

truco increíble, gracias :) –

5

Si ya tiene una aplicación de consola de Windows creado simplemente puede cambiar el tipo de salida de su aplicación a aplicación de Windows.

Según su proyecto: Vaya a Propiedades> Aplicación Seleccione "Aplicación de Windows" como Tipo de salida.

Este sería el menor impacto posible y que pueda mantener su programador de tareas de Windows que se ejecuta la misma tarea.

Cuestiones relacionadas