c# - visual - Cómo ejecutar una aplicación de consola.NET en segundo plano
hola mundo c# visual studio 2017 (9)
¡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. Solo sigue exactamente como en tu 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 realmente diferentes de la consola, excepto por la primera forma y las referencias. Es una ejecución totalmente oculta. ¡Intentalo!
Tengo una aplicación de consola escrita en C # que está programada para ejecutarse cada 15 minutos aproximadamente usando el Programador de tareas de Windows incorporado.
Cada vez que se ejecuta, el cuadro de 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?
¿Qué hay de implementar la aplicación en un servicio de Windows? Puede establecer el intervalo en 15 minutos y ejecutar la operación en timer_tick.
Esto es facil. Establezca la tarea para que se ejecute en una cuenta que no sea su cuenta de inicio de sesión.
Proyecto> Propiedades> pestaña Aplicación> cambiar Tipo de salida a "Aplicación de Windows".
No más ventana de consola.
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 a 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);
Si no escribe nada en la consola, puede convertirlo en un servicio. http://msdn.microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx
Si ya tiene una aplicación de consola de Windows creada, simplemente puede cambiar el tipo de salida de su aplicación a la aplicación de Windows.
Debajo de su proyecto: Vaya a Propiedades> Aplicación Seleccione "Aplicación de Windows" como el tipo de Salida.
Este sería el menor impacto y puede mantener su Programador de tareas de Windows ejecutando la misma tarea.
Solo se mostrará si está programado para ejecutarse como el mismo usuario que está actualmente conectado. Cree otro usuario en la máquina con una contraseña ridículamente larga, configúrelo como administrador (solo si es necesario) y programe la tarea para que se ejecute como tal usuario.
Sucio como cualquier cosa por ahí pero ( desde aquí ):
El proceso toma 3 archivos.
launch.bat
,invis.vbs
y (tu programa). En launch.bat (este archivo ejecuta su programa de forma silenciosa),wscript.exe "C:/yourpath/invis.vbs" "your file.bat"
. Eninvis.vbs
, coloca
CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False
Y finalmente en tu archivo,
launch.bat
, pon lo que quieras ...
echo off erase c:/junk.txt
. Bueno, ya terminaste. Simplemente abralaunch.bat
.
Aunque funciona como un encanto. Lanza el primer bate (launch.bat), que a su vez lanza su servicio / ejecutable en sigilo. Entonces, es un blip rápido para el lanzamiento original, luego se fue.