2010-08-16 21 views
18

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 algún trabajo en segundo plano.Haciendo que mi aplicación de consola sea invisible

Lo que pasa 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 asustan de que se abra y se cierre una ventana de CMD, además de que la biblioteca lo quiere tan invisible como sea posible.

me trataron siguiendo el código en este tema: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

pero fue en vano, todavía puede ver la aplicación de consola pop abren y se cierran después de que ha hecho todo su trabajo.

¿Hay alguna forma mejor de evitar que aparezca la consola? Gracias.

+0

¿Has probado mi código? ¿Sigues teniendo problemas? – Searock

Respuesta

36

Lo mejor que puedes hacer es simplemente no compilarlo como una aplicación de consola. Compílalo como un EXE de Windows y no se mostrará ninguna consola. Luego puede hacer lo que tenga que hacer en el método Principal sin mostrar una IU.

Pero en cualquier caso, si debe ocultar/mostrar la ventana de la consola, me mantendría alejado de usar FindWindow para esta tarea, ya que hay 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.

+1

Esa iba a ser mi sugerencia también. +1. – David

+0

+! para intuitivo, estilo de Microsoft ... – NinjaCat

+0

Ah, ya veo. Entonces, ¿qué sería eso en "Nuevo proyecto" en Visual Studio? "Proyecto vacío"? Porque no veo una opción para un .exe normal, solo algunos formularios y una aplicación de consola. – Kratz

8

¿Ha intentado: Project Properties> Application> output Type: to "Windows Application"?

+0

Acabo de hacer eso y ahora la aplicación está rota, está destinada a crear directorios y copiar archivos desde un recurso incrustado y ahora no funciona. :( – Kratz

2

Es un poco más complicado que una aplicación de consola ... pero si quiere que algo realmente se ejecute en segundo plano cuando alguien inicia sesión, entonces podría crear una aplicación de servicio de Windows.

Pero requiere un poco de trabajo adicional en cómo configurar e instalar el servicio de Windows, pero hay una abundancia de ejemplo de código 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

+1

Un caviat es que un servicio se iniciará antes de que el usuario inicie sesión, y no está vinculado a una cuenta de usuario específica. Dependiendo de lo que esté haciendo esto puede ser útil o causar dolores de cabeza. –

14

Como Josh Einstein ha sugerido que puede utilizar ShowWindow Api para ocultar su ventana.

Aquí está 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 acerca de este código ya que no he probado. Avísame si enfrentas algún problema.

+1

Esto funciona, pero muestra un breve parpadeo de una ventana de consola cuando inicia el proceso desde otro proceso. – Wouter

2

Hola, estaba creando una aplicación de consola a la que el planificador de tareas llamaría. No quería que apareciera la aplicación de la consola, así que cambié las propiedades del proyecto para tener la salida a la aplicación de Windows.

Cambiar el tipo de salida de la aplicación de Windows Ir a: Proyecto -> Propiedades del proyecto y cambiar el tipo de salida de aplicación para Windows

0

Probé ambos 2) Searock y luego 1) métodos Josh --- con Searock de solución, la ventana de la aplicación de la consola todavía apareció, aunque por un breve momento --- sin embargo, con la solución de Josh, la consola no apareció ni mi programa tuvo ningún problema, por supuesto tuve que reemplazar todas las llamadas de la consola.writeline con un llamada que registró la información a un archivo de registro

Nota: Acabo de comentar sobre la solución de Josh, pero no puedo hacer t sombrero todavía :)

Cuestiones relacionadas