c# - Haciendo mi aplicación de consola invisible
console-application (6)
Estoy desarrollando una aplicación de consola para mi biblioteca pública como proyecto escolar. La aplicación de la consola se ejecutará tan pronto como el usuario inicie sesión y realice un trabajo de fondo.
La cosa es que no quiero que la aplicación de consola aparezca realmente. Lo necesito invisible. Lo último que necesito son quejas porque algunas personas se asustaron porque una ventana de CMD se abrió y cerró, además de que la biblioteca lo quiere lo más invisible posible.
Intenté seguir el código en este hilo: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd
Pero en vano, todavía puedo ver que la aplicación de la consola se abre y se cierra una vez que ha hecho todo su trabajo.
¿Hay una mejor manera de detener la aparición de la consola? Gracias.
¡Lo mejor que puedes hacer es no compilarlo como una aplicación de consola! Compílalo como un EXE de Windows y no se mostrará ninguna consola. Entonces puedes hacer lo que necesites hacer en el método Principal sin mostrar una interfaz de usuario.
Pero en cualquier caso, si debe ocultar / mostrar la ventana de la consola, evitaría utilizar FindWindow para esta tarea, ya que existe una API mucho más confiable para esto: GetConsoleWindow . Esto le dará el HWND de la ventana de la consola y puede intentar pasarlo a ShowWindow.
¿Has probado: Propiedades del proyecto> Aplicación> Tipo de salida: a "Aplicación de Windows"?
Como Josh Einstein sugirió que puedes usar ShowWindow Api para ocultar tu ventana.
Aquí hay un ejemplo:
using System.Runtime.InteropServices
class CommandLine
{
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("Kernel32")]
private static extern IntPtr GetConsoleWindow();
const int SW_HIDE=0;
const int SW_SHOW=5;
static void Main(string[] args)
{
IntPtr hwnd;
hwnd=GetConsoleWindow();
ShowWindow(hwnd,SW_HIDE);
//Your logic goes here
}
}
No estoy seguro de este código ya que no lo he probado. Déjame saber si te enfrentas a algún problema.
Es un poco más complicado que una aplicación de consola ... pero si quieres que algo se ejecute realmente en segundo plano cuando alguien inicia sesión, puedes crear una aplicación de servicio de Windows.
Pero requiere un poco de trabajo adicional para configurar e instalar el Servicio de Windows, pero hay una gran cantidad de código de ejemplo en la web:
http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx
http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx
http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx
http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm
http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx
Hola, estaba creando una aplicación de Consola a la que llamaría el programador de tareas. No quería que la aplicación de la consola se mostrara, así que cambié las propiedades del proyecto para tener el resultado en la aplicación de Windows.
Cambie el tipo de salida a la aplicación de Windows Vaya a: Proyecto -> Propiedades del proyecto Y cambie el tipo de salida a la aplicación de Windows
Intenté ambos métodos 2) Searock y luego 1) Josh --- con la solución de Searock, la ventana de la aplicación de la consola aún aparecía, aunque por un breve momento --- sin embargo, con la solución de Josh, la consola no apareció ni mi programa tuvo problemas - Por supuesto que tuve que reemplazar todas las llamadas de console.writeline con una llamada que cerró la información en un archivo de registro
Nota: Habría comentado la solución de Josh, pero todavía no puedo hacerlo :)